我想创建一个程序来比较2个.csv文件,并打印其中一个文件中的行,但不打印另一个文件中的行。它基本上有效,但在执行此程序中的2个任务后它停止工作:/我是Python初学者。
csv=open('c:\Users\***\Desktop\prvi.csv','r')
csv2=open('c:\Users\***\Desktop\drugi.csv','r')
list1=[]
choice=0
loop=0
while loop==0:
choice=input('Odaberite zeljenu funkciju: \n1)\
Usporedi Book1 sa Book2\n2) Usporedi Book2 sa Book1 \n3) Print Book1 \n4) Print Book2 \n5) Izlaz \nOdabir: ')
if choice==1:
for row in csv:
if not row in csv2:
list1.append(row)
for row in list1:
print row
del list1[0:len(list1)]
elif choice==2:
for row in csv2:
if not row in csv:
list1.append(row)
for row in list1:
print row
del list1[0:len(list1)]
elif choice==3:
for row in csv:
print row
elif choice==4:
for row in csv2:
print row
elif choice==5:
loop=1
答案 0 :(得分:2)
您可能需要倒回或重新打开文件,因为在迭代内容一次后,文件“耗尽”。
答案 1 :(得分:0)
我做了一个如何阅读这些文件的例子,并且还清理了一些代码,因为它伤害了我的眼睛:D。您以非常奇怪的方式使用list1
。在其中放入一行,显示该行,然后删除列表中的所有内容(始终只是一行),然后再移动到下一行。在您的问题中,您说您只想显示行,因此不需要列表。如果你确实需要跟踪列表中的行,那么只需在list1.append(row)
后直接使用print row
,而不需要额外的for循环和删除。
# open lines as list, using read().split('\n') instead of readlines(),
# because readlines() leaves '\n' after the lines.
csv = open(r'c:\Users\***\Desktop\prvi.csv', 'r').read().split('\n')
csv2 = open(r'c:\Users\***\Desktop\drugi.csv', 'r').read().split('\n')
list1 = []
while True:
# never use input(), unless you are using python 3
choice = int(raw_input('Odaberite zeljenu funkciju: \n'
'1) Usporedi Book1 sa Book2\n'
'2) Usporedi Book2 sa Book1 \n'
'3) Print Book1 \n'
'4) Print Book2 \n'
'5) Izlaz \nOdabir: '))
if choice == 1:
for row in csv:
if not row in csv2:
list1.append(row)
print row
save_file()
elif choice == 2:
for row in csv2:
if not row in csv:
list1.append(row)
print row
save_file()
elif choice == 3:
for row in csv:
print row
elif choice == 4:
for row in csv2:
print row
elif choice == 5:
break
def save_file():
with open('output.txt', 'w') as f:
f.write('\n'.join(list1))
答案 2 :(得分:0)
如果你的csv文件中没有必须保留在输出中的重复项,我会在这里使用sets并简单地让Python计算差异。
差异(其他,......)
设置 - 其他 - ...
返回一个新集合,其中集合中的元素不在其他元素中。
csv = set(open(r'c:\Users\***\Desktop\prvi.csv', 'r').read().split('\n'))
csv2 = set(open(r'c:\Users\***\Desktop\drugi.csv', 'r').read().split('\n'))
#...
# get everything in csv1, but not in csv2
diff1 = csv1 - csv2
# get everything in csv2, but not in csv1
diff2 = csv2 - csv1