Python: запись определенных столбцов, указанных пользователем, в новый файл - PullRequest
0 голосов
/ 27 июня 2018

Если у меня есть файл с несколькими столбцами, например,

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)

Однако это не сработало, и я получил ошибку типа в последней строке. В конце я хотел бы, чтобы список вводился пользователем, чтобы выходной файл содержал только указанные столбцы, которые разделены символом ', во многом аналогично приведенному выше файлу exaple.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

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

0 голосов
/ 27 июня 2018

Вы должны сначала разбить столбцы, потому что они пришли как одна строка, также лучше использовать str.join для их склеивания:

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