我在编程方面相当新,我正在编写一个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