0
import csv

DATA=((10, 'Record 1', 'hi'),
      (20, 'Record 2', 'bye'),
      (30, 'Record 3', 'test'))

f=open('bookdata.csv', 'w')
writer=csv.writer(f)
writer=csv.writer(f,delimiter='\t',quotechar='"',quoting=csv.QUOTE_ALL)

for record in DATA:
    writer.writerow(record)
f.close()


f=open('bookdata.csv', 'r')

reader=csv.reader(f)
for chap, title, pack in reader:
    print("%s, %s, %s" % (chap, title, pack))
f.close()

それは私には正しいように見えますが、「ValueError: unpack するには 0 以上の値が必要です」と表示されます

それは最初の行を読みますが、クラッシュするのはその行を読んだ後です...

どんな助けでもいただければ幸いです

4

2 に答える 2

1

CSV のデフォルトの区切り文字はコンマですが、タブを使用しています。リーダーにタブ文字を使用するように指示していないため、フィールドを読み取るときにコンマを使用しています。

CSV ファイルにはカンマがないため、行が分割されていません。各ループオーバーreaderは、文字列を 1 つだけ含むリストを返します。

['10\t"Record 1"\t"hi"']
['20\t"Record 2"\t"bye"']
['30\t"Record 3"\t"test"']

したがって、これを解凍しようとすると、エラーが発生します。

この問題を解決するには、使用している区切り文字を読者に伝えます。

reader=csv.reader(f, delimiter="\t")

with statementまた、ファイルを自動的に閉じて、writerowsすべてのアイテムを一度に書き出す を使用する必要があります。

import csv

DATA=((10, 'Record 1', 'hi'),
      (20, 'Record 2', 'bye'),
      (30, 'Record 3', 'test'))

with open('bookdata.csv', 'w') as f:
    # writer=csv.writer(f) - this line is not required
    writer=csv.writer(f,delimiter='\t',quotechar='"',quoting=csv.QUOTE_ALL)
    writer.writerows(DATA) # note here I am using writerows

with open('bookdata.csv', 'r') as f:
    reader=csv.reader(f, delimiter="\t")
    for chap, title, pack in reader:
        print("%s, %s, %s" % (chap, title, pack))
于 2013-11-07T05:28:40.423 に答える