2

2 つのファイルがあり、最初のファイルは book1.csv と呼ばれ、次のようになります。

 header1,header2,header3,header4,header5
 1,2,3,4,5
 1,2,3,4,5
 1,2,3,4,5

2 番目のファイルは book2.csv と呼ばれ、次のようになります。

 header1,header2,header3,header4,header5
 1,2,3,4
 1,2,3,4
 1,2,3,4

私の目標は、book1.csv の 5 を含む列を book2.csv の対応する列にコピーすることです。

私のコードの問題は、正しく追加されていないか、コピーしたいインデックスだけを選択していないことです。また、間違ったインデックス位置を選択したというエラーが表示されます。出力は次のとおりです。

 header1,header2,header3,header4,header5
 1,2,3,4
 1,2,3,4
 1,2,3,41,2,3,4,5

これが私のコードです:

 import csv

 with open('C:/Users/SAM/Desktop/book2.csv','a') as csvout:
    write=csv.writer(csvout, delimiter=',')
    with open('C:/Users/SAM/Desktop/book1.csv','rb') as csvfile1:
        read=csv.reader(csvfile1, delimiter=',')
        header=next(read)
        for row in read:
            row[5]=write.writerow(row)

これを適切に追加するにはどうすればよいですか?

助けてくれてありがとう!

4

4 に答える 4

5

このようなものはどうですか。私は両方の本を読み、リストに保存する のすべての行book1の行にの最後の要素を追加します。次に、そのリストの内容を新しいファイルに書き込みます。book2book2.csv

with open('book1.csv', 'r') as book1:
    with open('book2.csv', 'r') as book2:
        reader1 = csv.reader(book1, delimiter=',')
        reader2 = csv.reader(book2, delimiter=',')

        both = []
        fields = reader1.next() # read header row
        reader2.next() # read and ignore header row
        for row1, row2 in zip(reader1, reader2):
            row2.append(row1[-1])
            both.append(row2)

        with open('output.csv', 'w') as output:
            writer = csv.writer(output, delimiter=',')
            writer.writerow(fields) # write a header row
            writer.writerows(both)
于 2013-09-03T16:44:32.920 に答える
1

「間違ったインデックス位置を選択したというエラー」についてはrow[5]、コードで使用しているためと思われます。Python でのインデックス作成は 0 から始まるA = [1, 2, 3, 4, 5]ため、5 を取得する必要がある場合はprint(A[4]).

2 つのファイルの行数が同じで、行の順序が同じであると仮定すると、次のようなことをしたいと思います。

import csv
# Open the two input files, which I've renamed to be more descriptive,
# and also an output file that we'll be creating
with open("four_col.csv", mode='r') as four_col, \
     open("five_col.csv", mode='r') as five_col, \
     open("five_output.csv", mode='w', newline='') as outfile:
  four_reader = csv.reader(four_col)
  five_reader = csv.reader(five_col)
  five_writer = csv.writer(outfile)
  _ = next(four_reader) # Ignore headers for the 4-column file
  headers = next(five_reader)
  five_writer.writerow(headers)
  for four_row, five_row in zip(four_reader, five_reader):
    last_col = five_row[-1] # # Or use five_row[4]
    four_row.append(last_col)
    five_writer.writerow(four_row)
于 2013-09-03T16:39:55.580 に答える