从一个TSV文件中读取多行,并基于列append data with comm

2024-09-30 18:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

如何根据TSV文件中的列索引来解析数据? 一旦我们从文件中读取数据,我们必须检查列0行1数据与列0行2数据,如果匹配,则获取列1行1数据,并需要在列1行1中附加所有匹配的条目。在

例如, 系统类型.tsv文件

Actrius  1990s drama films 
Actrius  Catalan language films 
Actrius  Spanish films 
Actrius  Barcelona in fiction 
Actrius  Films directed by Ventura Pons 
Actrius  1996 films 
An_American_in_Paris     Compositions by George Gershwin 
An_American_in_Paris     Symphonic poems 
An_American_in_Paris     Grammy Hall of Fame Award recipients 

在第0列的第1行中有“Actrius”,因此我们需要比较第0列中的所有行,并将匹配的条目列1的值用逗号分隔,如下所示。在

输出:

^{pr2}$

我试过这个,但不适合我。

def finalextract():
    lines_seen = set()
    outfile = open("Output.txt","w+")
    infile = open("SystemType.tsv","r+")
    for line in infile:
        if line[0] == lines_seen[0]:
            string = line[1]+','+lines_seen[1]
            outfile.write(string)
            lines_seen.add(string)
    infile.close()
    outfile.close()


Tags: 文件数据inanstringline条目infile
1条回答
网友
1楼 · 发布于 2024-09-30 18:23:57

这是我的想法(python3,但是我认为唯一的区别应该是我的print函数。如果要使用from __future__ import print_function写入输出文件,则可以from __future__ import print_function):

import collections

# I used variable "input" to hold the string from your example .tsv contents;
# you'd really want to read it in from a file.

D = collections.OrderedDict()
for line in input.splitlines():
    key, value = line.split('\t')
    if key not in D:
        D[key] = []
    D[key].append(value.strip())

for key, values in D.items():
    print(key, ','.join(values), sep='\t')

我的输出是:

^{pr2}$

相关问题 更多 >