0

次の形式の 2 つの csv ファイルがあります。

1 つ目は outputTweetsDate.csv です。

Here is some text;13.09.13 16:45
Here is more text;13.09.13 16:45
And yet another text;13.09.13 16:46

2 番目のファイルは apiSheet.csv です。

13.09.13 16:46;89.56
13.09.13 16:45;90.40

これら 2 つのファイルを比較し、2 つの日時値が一致する場合は、テキストとデータを 1 つの新しいファイル (finalOutput.csv) に追加します。

|89.56|,|Here is some text|
|89.56|,|Here is more text|
|90.49|,|And yet another text|

これは私がこれまで持っている私のコードです:

with open("apiSheet.csv", "U") as in_file1, open("outputTweetsDate.csv", "rb") as in_file2,open("finalOutput.csv", "wb") as out_file:
   reader1 = csv.reader(in_file1,delimiter=';')
   reader2 = csv.reader(in_file2,delimiter='|')
   writer = csv.writer(out_file,delimiter='|')
   for row1 in reader1:
       for row2 in reader2:
           if row1[0] == row2[1]:
               data = [row1[1],row2[0]]
               print data
               writer.writerow(data)

コードを編集したところ、今のところ動作しますが、すべてのコードを正しく反復処理するわけではありません。一時的に私の出力は次のとおりです。

|89.56|,|Here is some text|
|89.56|,|Here is more text|

そのため、同じものであっても、3番目のものは表示されません。ファイルをうまく反復していないようです。

ありがとうございました!

4

1 に答える 1

0

2 番目のループは、file1 の 2 行目が読み取られる前に、file2 (outputTweetsDate.csv) の末尾に到達します。

このスニペットを試してください:

 with open("apiSheet.csv", "U") as in_file1, open("outputTweetsDate.csv", "rb") as in_file2,open("finalOutput.csv", "wb") as out_file:
   reader1 = csv.reader(in_file1,delimiter=';')
   reader2 = csv.reader(in_file2,delimiter='|')
   writer = csv.writer(out_file,delimiter='|')
   row2 = reader2.next()
   for row1 in reader1:
       while row2 and row1[0] <= row2[1]:
           if row1[0] == row2[1]:
               data = [row1[1],row2[0]]
               print data
               writer.writerow(data)
           row2 = reader2.next()

編集 逆順はトリッキーです。賢くなろうとするのをやめて、力ずくでやりましょう。ファイルは RAM よりもはるかに小さいため、問題なく動作します。

 with open("apiSheet.csv", "U") as in_file1, open("outputTweetsDate.csv", "rb") as in_file2,open("finalOutput.csv", "wb") as out_file:
   reader1 = csv.reader(in_file1,delimiter=';')
   reader2 = csv.reader(in_file2,delimiter='|')
   writer = csv.writer(out_file,delimiter='|')

   rows2 = [row for row in reader2] # all the content of file2 goes in RAM.
   for row1 in reader1:
       for row2 in rows2:
           if row1[0] == row2[1]:
               data = [row1[1],row2[0]]
               print data
               writer.writerow(data)
于 2013-09-22T17:28:57.913 に答える