2015-09-28 180 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' –