如何在python中比较两个CSV的列?
你好!
我有两个CSV文件作为输入,举个例子:
文件1:
AK163828 chr5 s1 + e1 cttt 4
AK163828 chr5 s2 + e2 gtca 4
AK168688 chr6 s3 + e3 ggcg 4
AK168688 chr6 s4 + e4 tctg 4
文件2:
chr6s3+e3 ggcg
chr5s1+e1 cttt
chr6s4+e4 tata
chr5s2+e2 ggcg
#as you can see the file2 is randomly sorted
我想把文件2的第一列和文件1的第二、三、四、五列合并后进行比较,同时还想把文件2的第二列和文件1的第六列进行比较,最后只选出匹配的行。
我想要的输出是:
chr6s3+e3 ggcg
chr5s1+e1 cttt
我试着用这段代码:
import csv
reader1 = csv.reader(open(file1), dialect='excel-tab' )
reader2 = csv.reader(open(file2), dialect='excel-tab' )
for row1, row2 in zip(reader1,reader2):
F1 = row1[1] + row1[2] + row1[3] + row1[4] + '\t' row1[5]
F2 = row2[0] + '\t' + row2[1]
print set(F1) & set(F2)
但是它没有成功。你能帮我修正我的代码,或者给我其他的方法吗?谢谢你的帮助!
2 个回答
1
这样说吧:
import csv
reader1 = csv.reader(open('file1.tsv'), dialect='excel-tab' )
reader2 = csv.reader(open('file2.tsv'), dialect='excel-tab' )
keys = set()
for row in reader1:
keys.add((''.join(row[1:5]), row[5]))
for row in reader2:
if (row[0], row[1]) in keys:
print '\t'.join(row)
顺便提一下,你用的格式(dialect='excel-tab'
)通常叫做TSV,而不是CSV,虽然它是CSV的一种变体。你还得确保你的值是用制表符(Tab)分开的,而不是像你帖子里那样用空格。我猜你的数据应该是用制表符分开的,只是因为Stack Overflow的格式问题,才显示成了空格?
3
简单粗暴:
import csv
file1 = 'C:/Users/Me/Desktop/file1'
file2 = 'C:/Users/Me/Desktop/file2'
reader1 = csv.reader(open(file1))
reader2 = csv.reader(open(file2))
F1 = set(''.join(row1[0].strip().split()[1:6]) for row1 in reader1)
F2 = set(''.join(row2[0].strip().split()) for row2 in reader2)
for sequence in F1.intersection(F2):
print(sequence[:-4]),
print('\t'),
print(sequence[-4:])
输出结果:
chr6s3+e3 ggcg
chr5s1+e1 cttt