我在让Python脚本执行我想做的事情时遇到问题。它似乎没有在修改我的文件。

我想要:


读取具有以下格式的* .csv文件
PropertyName :: PropertyValue,…,PropertyName :: PropertyValue,{ExtPropertyName :: ExtPropertyValue},…,{ExtPropertyName :: ExtPropertyValue}
我想删除PropertyName ::并只保留PropertyValue的一列
我想添加标题行


我试图通过逗号替换::值,但似乎无法正常工作:

fin = csv.reader(open('infile', 'rb'), delimiter=',')
fout = open('outfile', 'w')
for row in fin:
   fout.write(','.join(','.join(item.split()) for item in row) + '::')
fout.close()


任何建议,无论是关于我的第一步问题,还是关于更大图片分辨率的建议,始终受到欢迎。谢谢。

一个人要求的UPDATE / EDIT,足以让我复习!

这是* .csv文件(输入)的第一行

InnerDiameterOrWidth::0.1,InnerHeight::0.1,Length2dCenterToCenter::44.6743867864386,Length3dCenterToCenter::44.6768028159989,Length2dToInsideEdge::44.2678260053526,Length3dToInsideEdge::44.2717800813466,Length2dToOutsideEdge::44.6743867864386,Length3dToOutsideEdge::44.6768028159989,MinimumCover::0,MaximumCover::0,StartConnection::ImmxGisUtilityNetworkCommon.Connection,


在理想的世界中,这就是我希望文本文件显示的样子(输出)

InnerDiameterOrWidth, InnerHeight, Length2dCenterToCenter,,,,,,,,,,,
0.1,0.1,44.6743867864386


所以一个标题行和列中的值

更新的JSON信息

每行的末尾都有JSON格式的文本:

{StartPoint::7858.35924983374[%2C]1703.69341358077[%2C]-3.075},{EndPoint::7822.85045874375[%2C]1730.80294308742[%2C]-3.53962362760298}


我需要用标头拆分为X Y Z和X Y Z

最佳答案

也许是这样的(假设每一行都有相同的键,并且顺序相同):

import csv

with open("diam.csv", "rb") as fin, open("diam_out.csv", "wb") as fout:
    reader = csv.reader(fin)
    writer = csv.writer(fout)
    for i, line in enumerate(reader):
        split = [item.split("::") for item in line if item.strip()]
        if not split: # blank line
            continue
        keys, vals = zip(*split)
        if i == 0:
            # first line: write header
            writer.writerow(keys)
        writer.writerow(vals)


产生

localhost-2:coding $ cat diam_out.csv
InnerDiameterOrWidth,InnerHeight,Length2dCenterToCenter,Length3dCenterToCenter,Length2dToInsideEdge,Length3dToInsideEdge,Length2dToOutsideEdge,Length3dToOutsideEdge,MinimumCover,MaximumCover,StartConnection
0.1,0.1,44.6743867864386,44.6768028159989,44.2678260053526,44.2717800813466,44.6743867864386,44.6768028159989,0,0,ImmxGisUtilityNetworkCommon.Connection


我认为大多数代码都应该有意义,除了zip(*split)技巧外:基本上可以转置序列,即

>>> s = [['a','1'],['b','2']]
>>> zip(*s)
[('a', 'b'), ('1', '2')]


这样就可以按照索引将元素分组在一起(第一个元素在一起,第二个元素等等)

关于python - Python CSV读取->写入;删除并替换PLUS:行尾为JSON格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15190260/

10-13 07:42