我有两个制表符分隔(tsv)文件。我想在tsv文件中获得与两个文件的特定列的项匹配的输出。我是python的新手,如果我得到一些评论会很棒。
输入file1:
#comment one
#comment two and more
ab123 1 339 GT + s4
ab222 3 23 CT - se4
ab1100 3 523 AA + aa11
ab2211 20 166 TT + ss
输入file2:
ab123 1
ab1100 3
预期输出是输入file1的前4列,匹配file2的第1列:
ab123 1 339 GT
ab1100 3 523 AA
我正在尝试的代码是:
with open("file1") as data:
for line1 in data:
with open("file2") as id:
for line2 in id:
if str(line2) in line1:
print line1
答案 0 :(得分:1)
我的方法是使用file1
生成一个dict并迭代通过阅读file2
生成的列表,并扩展此列表,然后使用join()
方法打印它:< / p>
with open('1.csv') as f1, open('2.csv') as f2:
d1 = {tuple(i.split()[:2]): i.split()[2:] for i in f1.read().split('\n')}
for i in f2.read().split('\n'):
tmp = i.split()
if tuple(tmp[:2]) in d1:
print(" ".join(tmp+(d1[tuple(tmp[:2])][:2])))
输出:
ab123 1 339 GT
ab1100 3 523 AA
希望这有帮助。
答案 1 :(得分:0)
您可以尝试使用csv
模块阅读tab-separated
值文件(tsv
文件),只需提及delimiter='\t'
,下面是代码:
import csv
with open('file1.tsv','rb') as tsv1 , open('file2.tsv', 'rb') as tsv2:
tsv1 = csv.reader(tsv1, delimiter='\t')
tsv2 = csv.reader(tsv2, delimiter='\t')
tsv1_list=list(tsv1)
tsv2_list=list(tsv2)
result = [e1[:4] for e1 in tsv1_list for e2 in tsv2_list if e1[0]==e2[0]]
print result
输出:
[['ab123', '1', '339', 'GT'], ['ab1100', '3', '523', 'AA']]