Python:将用户指定的某些列写入新文件

时间:2018-06-27 15:14:32

标签: python python-2.7 file-writing

如果我有一个包含多个列的文件,例如

0, 1, 2, 3, 4, 5, 6
a, b, c, d, e, f, g

我想将某些列写到新文件中,其中列号存储在列表col=[]中。如何使用存储在列表中的列号的迭代来复制例如以下结果:

new_file.write(line[0]+','+line[5]+','+line[6]+'\n')

我尝试过:

col = [0,5,6]
for line in file:
   new_file.write(line[i] for i in col)

但是这不起作用,我在最后一行收到类型错误。最后,我希望用户输入列表,以便输出文件仅包含指定的以'分隔的列,就像上面的示例文件一样。

2 个答案:

答案 0 :(得分:2)

for line in file:迭代每行的每个字符,而不是您想要的。

与通常使用逗号分隔的文件一样,您应该使用csv模块来正确读取字段,并使用相同的csv模块将它们写回:

import csv

col = [0,5,6]

with open("input.csv") as fr, open("output.csv","w",newline="") as fw:
    cr = csv.reader(fr)
    cw = csv.writer(fw)
    cw.writerows([row[i] for i in col] for row in cr)

创建:

0, 5, 6
a, f, g

Python 2.7需要将open("output.csv","w",newline="")更改为open("output.csv","wb")

答案 1 :(得分:0)

您必须首先拆分列,因为它们是作为单个字符串出现的,最好使用str.join将它们粘在一起:

col = [0,5,6]
for line in file:
   line = line.split()
   new_file.write(", ".join(line[i] for i in col))