2014-02-12 117 views
-2

我有两个CSV文件中..我想用第三列比较文件1的第二列,然后在OUTPUTFILE打印已匹配比较两个CSV文件的Python

file1.csv

A0AUZ9 ENSP00000281772

A0AUZ9 ENSP00000405724

A0AUZ9 ENSP00000401408

A0AUZ9 ENSP00000393432

A0AVK6 ENSP00000250024

A0AVK6 ENSP00000434199

A0AVT1 ENSP00000313454

A0AVT1 ENSP00000399234

A0JNW5 ENSP00000279907

file2.csv

meNOG13950 9606 ENSP00000305973 1 264

meNOG14003 9606 ENSP00000281772 1 987

meNOG14125 9606 ENSP00000346414 1 624

meNOG06168 9606 ENSP00000287936 1 888

meNOG06177 9606 ENSP00000313454 1 1052

meNOG06177 9606 ENSP00000333266 1 1012

OUTPUTFILE。 txt

个meNOG14003 9606 ENSP00000281772 1 987

meNOG06177 9606 ENSP00000313454 1 1052

感谢

+0

很高兴看到您尝试过的内容以及您付出的努力。如果你没有提出任何建议,不要期望社区做出很多努力。 – DeadChex

回答

1

这样或许真的:

import csv 
with open('file1.csv') as f1, open('file2.csv') as f2: 
    reader1, reader2 = [csv.reader(f, delimiter=' ') for f in [f1,f2]] 
    m1 = {row[1]:row for row in reader1} 
    m2 = {row[2]:row for row in reader2} 
    intersect = set(m1.keys()) & set(m2.keys()) 
    with open('output.txt', 'w') as f_out: 
     writer = csv.writer(f_out, delimiter=' ') 
     for k in intersect: 
      writer.writerow(m2[k]) 

输出:

$ cat output.txt 
meNOG14003 9606 ENSP00000281772 1 987 
meNOG06177 9606 ENSP00000313454 1 1052 
+0

在python 2.6.4&2.7.3中试试这个代码,它们都返回“Traceback(最近调用最后一个): 文件”compare3.py“,第4行,在 m1 = {row [1]:row for row在reader1中} 文件“compare3。py“,第4行,在 m1 = {row [1]:行在reader1中的行} IndexError:列表索引超出范围 ”我可以知道您可能使用哪个版本的python?谢谢。 – Chubaka

0

哪里是你的代码..

def do_work(): 
    with open('test.csv') as f: 
     for line in f: 
      line = line.rstrip("\n") 
      column = line.split(",") 
      if column[1] == column[2]: 
       print("Woohoo, {0} is equal to {1}!".format(column[1], column[2])) 

do_work() 

这就是如何在同一个csv中比较第2列到第3列,因此建立起来的。打开两个处理程序并在CSV中进行比较。