【发布时间】:2015-03-26 12:18:17
【问题描述】:
我有一个看似简单的问题,但现在卡在它上面太久了。我想比较两个文件(格式如下)
> file1
20 246057 0.28 68363 0 A
20 246058 0.28 68396 T C
20 246059 0.28 76700 A G
20 246060 0.28 76771 T C
20 246061 0.28 76915 0 A
> file2
112879285 R 68303 20
200068921 M 68319 20
200257910 K 68336 20
200192457 W 68363 20
138777928 Y 68396 20
我想将 file1 的第 0 列和第 3 列与 file2 的第 2 列和第 3 列进行比较,如果它们匹配,我想输出其余信息以匹配两个文件中的行,如下所示:
> desired output
20 246057 0.28 68363 0 A 200192457 W
20 246058 0.28 68396 T C 138777928 Y
这是我到目前为止的代码,我已经尝试了这个的几种变体以及这里的许多建议,但我仍然不知道如何从 file1 获取相应的信息。我尝试的大多数事情都会导致每次匹配都会重复 file1 中的最后一行。
#!/usr/bin/python
import csv
data2 = []
output = open("output.txt","w")
with open("file1.txt", "rb") as in_file1, open("file2.txt","rb") as in_file2:
reader1 = csv.reader((in_file1), delimiter="\t")
for row1 in reader1:
y1 = row1[0], row1[3]
data2.append(tuple(y1))
y = row1
reader2 = csv.reader((in_file2), delimiter="\t")
for row2 in reader2:
z = row2[-1], row2[2]
if tuple(z) in data2:
out = "\t".join(row2)
output.write(out+"\n")
我正在努力的部分是在解析后从 file1 获取输出。所以我目前得到了下面的结果,但我还想要 file1 中这些行的相应信息:
> current output
200192457 W 68363 20
138777928 Y 68396 20
非常感谢任何帮助或建议!谢谢! (我使用的是 python 2.7)
【问题讨论】:
-
使用带有元组键的字典?
-
你能给我举个例子吗?对不起,我对编程很陌生
-
是的,我给你举了一个例子。事实上,我给了你一个完整的程序版本作为例子。 :)
-
很抱歉,我的连接速度很慢,现在会检查一下。谢谢你:)
标签: python loops for-loop multiple-columns string-matching