работа с колонками в tsv файлах - python 3 - PullRequest
0 голосов
/ 25 мая 2020

У меня есть файл tsv, разделенный на столбцы, из которых мне нужно выбрать определенные c столбцы и записать их в новый файл (в основном фильтруя исходный файл). Столбцы выбираются в соответствии с заголовками, содержащимися в отдельном списке. Мне удалось найти индексы соответствующих столбцов, но по какой-то причине я не могу заставить их правильно записать в новый файл.

with open ("some_file.txt", "w") as out_file, open("another_file.txt", "r") as in_file:
first_line = True
for line in in_file: 
    line = line.rstrip("\n")
    line = line.split("\t")         
    if first_line:   
        column_indices = [x for x in range(len(line)) if line[x] in [some_list]
        first_line = False

Если я вручную вставляю индекс (out_file.write (строка [7] + «\ n»), печатается правильный столбец, но ни один тип композиции цикла / списка, который я пробовал, не имеет работал для всех индексов. Единственный способ, которым мне удалось написать все соответствующее содержимое, - это строки, следующие за заголовками, а не столбцы под каждым заголовком.

Я новичок в python и так приветствуется любая помощь / понимание!

1 Ответ

1 голос
/ 25 мая 2020

Python упакован с модулем csv , который содержит классы DictReader и DictWriter , разработанные для вашего варианта использования. Не нужно изобретать колесо заново:

input.tsv:

col1    col2    col3    col4    col5
1   2   3   4   5
2   3   4   5   6
3   4   5   6   7
4   5   6   7   8

Python:

import csv

with open('input.tsv','r',newline='') as fin,open('output.tsv','w',newline='') as fout:
    reader = csv.DictReader(fin,delimiter='\t')
    writer = csv.DictWriter(fout,delimiter='\t',fieldnames=['col2','col3','col4'],extrasaction='ignore')
    writer.writeheader()
    for row in reader:
        writer.writerow(row)

output.tsv:

col2    col3    col4
2   3   4
3   4   5
4   5   6
5   6   7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...