3

2つのcsvの間で特定の列の値を比較しようとしています。同じように次のコードを試しました。ただし、出力もエラーもありません。これで私を助けてください

with open("File1.csv", "rb") as in_file1, open("File2.csv", "rb") as in_file2,open("File3.csv", "wb") as out_file:
   reader1 = csv.reader(in_file1)
   reader2 = csv.reader(in_file2)
   writer = csv.writer(out_file)
   for row2 in reader2:
       for row1 in reader1:
           if row2[0] == row1[0]:
               row2[1] = row1[1]
       writer.writerow(row2)

データは次のようになります。

File 1

A 100
B 200
C 300
D 400
E 500

FIle 2

A
C
E
E
E
D

File 3 (Should be)

A 100
C 300
E 500
E 500
E 500
D 400
4

2 に答える 2

2

File1.csvはマッピングです。最初に読んで、辞書に保存してください。次に、File2.csvを繰り返し処理し、マッピングディクショナリから取得した値と一緒にFile3.csvに書き込みます。

次のコードはあなたの例で機能します:

with open("File1.csv", "rb") as in_file1:
    d = dict(csv.reader(in_file1, delimiter=' '))

with open("File2.csv", "rb") as in_file2, open("File3.csv", "wb") as out_file:
    writer = csv.writer(out_file, delimiter=' ')
    for rec in csv.reader(in_file2, delimiter=' '):
        writer.writerow((rec[0], d[rec[0]]))

説明のために、d次のようになります。

{'A': '100', 'B': '200', 'C': '300', 'D': '400', 'E': '500'}

値は文字列(整数ではありません)ですが、ファイルに出力するだけなので、これは問題ではありません。

于 2013-01-17T13:17:12.103 に答える
1

単にこのように使用しないのはなぜですか:

lookup = {}                                                                     
with open('file1', 'r') as f:                                                   
    lookup = dict([l.split() for l in f.read().split('\n') if len(l) > 0])         
with open('file2', 'r') as file2, open('out', 'w') as out:                      
    for line in file2.readlines():                                              
        line = line.strip()                                                     
        out.write("%s %s\n" % (line, lookup[line]))

ここでcsvを使用する意味がわかりません

于 2013-01-17T13:25:50.580 に答える