【问题标题】:working with columns in tsv files - python 3使用 tsv 文件中的列 - python 3
【发布时间】:2026-02-11 06:00:02
【问题描述】:

我有一个 tsv 文件拆分成列,我需要从中选择特定的列并将它们写入一个新文件(基本上是过滤原始文件)。这些列是根据单独列表中包含的标题选择的。我设法找到了相关列的索引,但由于某种原因,我无法让它们正确写入新文件。

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(line[7] + "\n") 会打印正确的列,但我尝试过的循环/列表组合类型没有适用于所有索引。我设法编写所有相关内容的唯一方法是在标题后面的行中,而不是在每个标题下的列中。

我是 python 的初学者,因此非常感谢任何帮助/见解!

【问题讨论】:

    标签: python csv file python-3.7


    【解决方案1】:

    Python 与csv 模块一起打包,其中包含专为您的用例设计的DictReaderDictWriter 类。无需重新发明*:

    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)
    

    输出.tsv:

    col2    col3    col4
    2   3   4
    3   4   5
    4   5   6
    5   6   7
    

    【讨论】: