Python split和csv;修改现有的Python脚本

时间:2013-03-03 23:12:27

标签: python csv split

另一位用户非常友好地帮助我使用一个脚本来读取文件并删除/替换'::'并将列移动到标题: (我正在重新发布,因为它可能对这种形式的人有用 - 我的问题如下)

with open('infile', "rb") as fin, open('outfile', "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)

我不知道此文件的最后一列最后有以下文字:

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

如何修改此现有代码以实现上述目标,并且: 1.删​​除括号{} 2.将'[%2C]'转换为',' - 使逗号分隔为文件的其余部分 3.制作'Xa Ya Za'和'Xb Yb Zb'作为#2中解放的价值的标题

以上文字是输入文件。原始脚本的输出产生:

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

是否可以在那里插入一个简单的strip命令?

谢谢,感谢您的指导 - 我是一名Python新手

1 个答案:

答案 0 :(得分:0)

您似乎在寻找字符串上的replace方法:http://docs.python.org/2/library/stdtypes.html#str.replace

zip

之后可能是这样的
keys = [key.replace('{', '') for key in keys]
vals = [val.split('[%2C]') for val in vals]

我不确定csv.writer是否会像这样在vals中处理嵌套列表,但是你明白了。如果是这样,val应该是一个平面列表。也许这样的事情会使它变得扁平化:

vals = [item for sublist in vals for item in sublist]