Python CSV read>write;remove and replace PLUS:行尾是JSON表单

2024-03-29 10:55:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想:

  1. 读入具有以下格式的*.csv文件 PropertyName::PropertyValue,…,PropertyName::PropertyValue,{ExtPropertyName::ExtPropertyValue},{ExtPropertyName::ExtPropertyValue}
  2. 我想删除PropertyName::并只保留behid属性值的一列
  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文件的第一行(输入)

^{pr2}$

在一个完美的世界里,这里是我想要我的文本文件的样子(输出)

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两部分


Tags: 文件csvin标题for格式openrow
1条回答
网友
1楼 · 发布于 2024-03-29 10:55:48

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

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)

产生

^{pr2}$

我认为大部分代码应该是有意义的,除了zip(*split)技巧:基本上是转置一个序列,即

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

因此,元素现在按索引分组(第一个元素都在一起,第二个元素等等)

相关问题 更多 >