2013-03-28 86 views
0

我有三個文件。我想比較列表中水果和匹配的水果,我想將匹配的水果附加到Append.txt文件,然後按升序排序。比較兩個CSV文件中的值,附加價值爲文本文件

test1.csv

CustID,Name,Count,Item,Date 
23,Smith,8,apples,08/12/2010 
1,Jones,8,banana,03/26/2009 
15,Miller,2,cookie dough,03/27/2009 
6,Fisher,8,oranges,06/09/2011 

test2.csv

FRUIT,Amount,Aisle 
oranges,1,1 
apples,1,1 
pears,1,1 

Append.txt

Fruit,Total,Aisle 
cherries,1,1 
dates,2,1 
grapes,5,1 
kiwis,2,2 
peaches,2,2 
plums,1,1 
watermelon1,2 

代碼:

import csv 

# Iterate through both reader1 and reader2, compare common row, and append matching column data to test.txt in its matching column 
with open("C:\\Test\\Append.txt", 'a') as f: 
    reader1 = csv.reader(open("C:\\Test\\test1.csv", 'rb'), delimiter=',') 
    row1 = reader1.next() 
    reader2 = csv.reader(open("C:\\Test\\test2.csv", 'rb'), delimiter=',') 
    row2 = reader2.next() 
    if (row1[3] == row2[0]): 
     print "code to append data from row1[0] to test.txt row[0] goes here" 

f.close() 
exit 

print "code to sort test.txt ascending on column[0] goes here" 

我的初始腳本不起作用。檢查後我可以看到,代碼只比較行1與行1,行2與2等,我真的希望它比較所有行(行1與行1,行1與行2,行2與行1,行2與第2行等)。在運行主腳本之後,測試文件可以填充沒有記錄或最多5條記錄。追加文件可以是空的或有數百個記錄。使用python 2.7。

我也不能確定如何在完成時按升序排序文件。

回答

1

使用sets。先讀取兩個CSV文件,然後收集行中的成果。

然後使用set intersections查找這兩個文件共有的所有水果,將這些水果從Append.txt文件中添加到該水果中,排序並將所有水果寫回文件。

import csv 

# collect the fruits of both CSV files 
with open('c:/Test/test1.csv', 'rb') as test1: 
    reader = csv.reader(test1) 
    next(reader, None) # ignore header 
    test1_fruit = set(row[3] for row in reader) 
with open('c:/Test/test2.csv', 'rb') as test2: 
    reader = csv.reader(test2) 
    next(reader, None) # ignore header 
    test2_fruit = set(row[0] for row in reader) 

# Read all the fruit from Append 
with open("C:/Test/Append.txt", 'r') as append: 
    fruit = set(line.strip() for line in append if line.strip()) 

# add all fruit that are in both test1 and test2 
fruit |= test1_fruit & test2_fruit 

# write out a sorted list 
with open("C:/Test/Append.txt", 'w') as append: 
    append.write('\n'.join(sorted(fruit))) 
+0

總的來說它的工作,。我刪除了|在第12行,並將第15行的'w'更改爲'a',否則它覆蓋Append.txt文件中的現有數據。無論如何要在追加文件的末尾添加換行符?對於這些新手(像我)不要忘記導入csv。雅虎。謝謝。 – user12059

+0

@ user12059:對,我的解釋稍有不同。如果你刪除了'|',那麼你並不關心'Append.txt'中列出的果子*,所以我刪除了完全讀取該文件。爲你增加了額外的換行符。 –

+0

完美。現在對我來說,它將嵌套在最後一個括號內。你今天的新BFF。 :-) – user12059