2015-09-28 124 views
0

我有2个csv文件,分别为csv1csv2CSV比较列值python

csv1

1,9,10 
2,10,11 
3,11,10 

CSV2

2,b 
1,a 
3,c 

我想的csv1第一列的每个值检查的CSV2第一列,如果有匹配第二列csv2的另一个值是应用程序结束于csv1。 我的最终输出将是:

1,9,10,a 
2,10,11,b 
3,11,10,c 
+3

对于是否追加 – StefanNch

+0

请参阅http:// stackoverflow。com/questions/30852710/compare-2-seperate-csv-files-and-write-difference-to-a-new-csv-file-python-2-7/30853120 – Jimilian

+0

你能告诉我们你的东西吗?做到目前为止? – ozgur

回答

0

ALGO

  1. 使用csv模块读取和写入csv文件。
  2. 创建csv文件的字典结构在写模式2
  3. 打开新文件。
  4. 以读模式打开csv文件1。
  5. 迭代csv文件1中的每一行。
  6. 检查行中的第一项出现在字典(第2点)中。
  7. 如果6为真,则将字典中的值附加到当前行。
  8. 将行写入文件(点3)。

代码

import csv 
# Create Dictionary structure of csv file 2 
with open("/home/vivek/2.csv", "rb") as fp: 
    root = csv.reader(fp,) 
    root2 = {} 
    for i in root: 
     root2[i[0]] = i[1] 

print "Debug 1: Dictionary of file 2:", root2 

with open("/home/vivek/output.csv", "wb") as fp: 
    with open("/home/vivek/1.csv", "rb") as fp1: 
     output = csv.writer(fp, delimiter=",") 
     root = csv.reader(fp1,) 
     for i in root: 
      #Check first item from the row is present in dictionary. 
      if i[0] in root2: 
       i.append(root2[i[0]]) 
      output.writerow(i) 

列表追加Vs的级联:

>>> import timeit 
>>> def addtest(): 
... l = [] 
... for i in range(1000): 
...  l +[i] 
... 
>>> def appendtest(): 
... l = [] 
... for i in range(1000): 
...  l.append(i) 
... 
>>> print "Time 1:", timeit.timeit('appendtest()', 'from __main__ import appendtest') 
Time 1: 110.55152607 
>>> print "Time 1:", timeit.timeit('addtest()', 'from __main__ import addtest') 
Time 1: 265.882155895 
0

以下应该做你需要什么,它利用Python的csv模块。它首先读取整个的csv2成,然后可以用来看看,关键是目前在阅读csv1的字典:

import csv 

d_csv2 = {} 

with open('2.csv', 'r') as f_csv2: 
    csv_2 = csv.reader(f_csv2) 
    for cols in csv_2: 
     d_csv2[cols[0]] = cols[1] 

with open('1.csv', 'r') as f_csv1, open('output.csv', 'wb') as f_output: 
    csv_1 = csv.reader(f_csv1) 
    csv_output = csv.writer(f_output) 

    for cols in csv_1: 
     if cols[0] in d_csv2: 
      csv_output.writerow(cols + [d_csv2[cols[0]]]) 

它创建下列output.csv文件:

1,9,10,a 
2,10,11,b 
3,11,10,c 
+0

是的,我们可以在同一行写'with'语句,列表的连接需要更多的时间,然后'append' –