Python管理列表

时间:2012-06-28 13:03:23

标签: python

我想创建一个程序来比较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

3 个答案:

答案 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计算差异。

From the documentation:

  

差异(其他,......)
  设置 - 其他 - ...
  返回一个新集合,其中集合中的元素不在其他元素中。

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