1

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

我想要:

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

我试图逐步用逗号替换 :: 值,但似乎无法让它工作:

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()

任何建议,无论是关于我的第一步问题,还是更大的图片分辨率,都会受到赞赏。谢谢。

更新/编辑由一个足够好来为我审查的人要求!

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

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}

我需要用标题分成 XYZ 和 XYZ

4

1 回答 1

1

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

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')]

这样元素现在按它们的索引分组在一起(第一个都在一起,第二个等等)

于 2013-03-03T20:54:29.327 回答