0

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

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. Produce ' 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}

是否可以在其中插入一个简单的条命令?

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

4

1 回答 1

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 中一样,但你明白了。如果是这样, vals 应该是一个平面列表。也许这样的事情会使它变平:

vals = [item for sublist in vals for item in sublist]
于 2013-03-03T23:30:40.727 回答