我在編程方面相當新,我正在編寫一個python程序,它將根據特定列比較2個.csv文件並檢查添加,刪除和修改。該.csv文件都按以下格式,包含列相同數量,並使用BillingNumber爲重點:將2個.csv文件與Python進行比較,然後輸出結果
BillingNumber,CustomerName,IsActive,IsCreditHold,IsPayScan,City,State
"2","CHARLIE RYAN","Yes","No","Yes","Reading","PA"
"3","INSURANCE BILLS","","","","",""
"4","AAA","","","","",""
我需要比較僅列0,1,2,4,我曾嘗試許多不同的方式來完成這一點,但我沒有任何運氣。我知道我可以使用csv.DictReader
或csv.reader
將它們加載到字典中,但在此之後我卡住了。在將它們加載到內存後,我不確定在哪裏或如何啓動。
我想這之前:
import time
old_lines = set((line.strip() for line in open(r'Old/file1.csv', 'r+')))
file_new = open(r'New/file2.csv', 'r+')
choice = 0
choice = int(input('\nPlease choose your result format.\nEnter 1 for .txt, 2 for .csv or 3 for .json\n'))
time.sleep(1)
print(".")
time.sleep(1)
print("..")
time.sleep(1)
print("...")
time.sleep(1)
print("....")
time.sleep(1)
print('Done! Check "Different" folder for results.\n')
if choice == 1:
file_diff = open(r'Different/diff.txt', 'w')
elif choice == 2:
file_diff = open(r'Different/diff.csv', 'w')
elif choice == 3:
file_diff = open(r'Different/diff.json', "w")
else:
print ("You MUST enter 1, 2 or 3")
exit()
for line in file_new:
if line.strip() not in old_lines:
file_diff.write("** ERROR! Entry "+ line + "** Does not match previous file\n\n")
file_new.close()
file_diff.close()
,因爲如果有一個額外的線,或者缺少一個,它會記錄該行不同的後一切它不能正常工作。它也比較了我不想做的整個行。這基本上只是一個起點,雖然它有效,但它不足以滿足我的需求。我真的只是尋找一個開始的好地方。謝謝!
這將是開始的地方http://docs.python.org/2/library/csv.html – danodonovan 2013-02-28 16:39:35
所以這聽起來像你正在嘗試編寫一個diff程序。這是一個相當深入的話題。嘗試http://stackoverflow.com/questions/805626/diff-algorithm或http://stackoverflow.com/questions/5897983/diff-algorithm-implementation-in-python。 – Hoopdady 2013-02-28 16:39:42
「我不確定將它們加載到內存後到底在哪裏或如何啓動」。這是有原因的。你沒有嚴格描述你想要的東西。您說過要「按特定列比較2個.csv文件並檢查添加,刪除和修改」。正如Hoopdady所說,這個簡單的陳述涵蓋了很多。我會首先仔細地寫下你想要檢查的內容(比如:如果一列中有一個加法,另一列中有一個刪除,那該怎麼辦)。一旦你足夠好地提出你的問題,實現將變得更容易。 – Wilduck 2013-02-28 16:41:54