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:需要超过 0 个值才能解压”

它确实阅读了第一行,但在阅读了第一行之后它崩溃了......

任何帮助,将不胜感激

4

2 回答 2

1

CSV 的默认分隔符是逗号,但您使用的是制表符。由于您没有告诉读者使用制表符,因此在阅读字段时使用逗号。

由于您的 CSV 文件中没有逗号;线路没有被拆分;并且每个循环reader都返回一个只有一个字符串的列表:

['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 回答
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,delimiter=',',quotechar='"',quoting=csv.QUOTE_MINIMAL)

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()
于 2013-11-07T05:51:35.503 回答