0

我想制作一个程序来比较 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
4

3 回答 3

2

您可能需要倒带或重新打开文件,因为在对内容进行一次迭代后,文件“已用尽”。

于 2012-06-28T13:04:47.323 回答
0

如果您的 csv 文件中没有必须保留在输出中的重复项,我会在此处使用集合并让 Python 计算差异。

从文档中:

difference(other, ...)
set - other - ...
返回一个新的集合,其中的元素不在其他集合中。

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
于 2012-06-28T14:06:20.280 回答
0

我做了一个如何阅读这些文件的例子,并且还清理了你的代码,因为它伤害了我的眼睛:D。你list1以一种非常奇怪的方式使用。您在其中放入一行,显示该行,然后删除列表的所有内容,该列表始终只有一行,然后移至下一行。在您的问题中,您说您只想显示线条,因此不需要列表。如果您确实需要跟踪列表中的行,则只需list1.append(row)直接使用 after 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))
于 2012-06-28T13:45:18.943 回答