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

内容を1回繰り返した後、ファイルが「使い果たされた」ため、ファイルを巻き戻すか、再度開く必要があります。

于 2012-06-28T13:04:47.323 に答える
0

これらのファイルの読み方の例を作成し、目を痛めたのでコードを少しクリーンアップしました:D。あなたはlist1非常に奇妙な方法で使用していました。その中に1行を入れ、その行を表示してから、リストのすべてのコンテンツ(常に1行)を削除してから、次の行に移動します。あなたの質問では、行を表示したいだけなので、リストは必要ありません。リスト内の行を追跡する必要がある場合は、余分なforループや削除を一切行わずに、list1.append(row)直後に使用してください。print row

# 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 に答える
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 に答える