Python3 CSV阅读器ValueError

时间:2014-06-12 17:50:48

标签: python csv python-3.x

我搜索了python csv问题,似乎找不到任何解决读者错误的问题。

我有一个包含6列的csv文件,试图访问其中两列:

import csv

with open('/home/conjugater/Downloads/aapl.csv', newline='') as csvfile:
  dialect=csv.Sniffer().sniff(csvfile.read(1024))
  csvfile.seek(0)
  reader=csv.reader(csvfile, dialect)
  for row in reader:
      for Date, Open, High, Low, Close, Volume in row:
          print(Date, Close)

我没有完成编码,但这是我第一次使用csv模块,我只是想了解它(一般来说对python来说相对较新)。

Traceback (most recent call last):
File "reader.py", line 8, in <module>
for Date, Open, High, Low, Close, Volume in row:
ValueError: need more than 5 values to unpack

我可以使用

获取我想要的列
for row in reader:
    print(row[0], row[4])

但我知道有一种方法可以为每个列分配一个python名称;任何帮助非常感谢。

3 个答案:

答案 0 :(得分:3)

当你只需要一个for循环时,你有2个循环:

for (Date, Open, High, Low, Close, Volume) in reader:
    print(Date, Close)

答案 1 :(得分:1)

为什么要分配newline=''?这告诉open()将每个空字符串视为一行的结尾。请尝试这样做:newline='\n'。或者在不通过newline的情况下尝试。

以下Vor的评论也很有用。 open {{1}}了解详情。

答案 2 :(得分:1)

你很近,但你需要使用

with open('/home/conjugater/Downloads/aapl.csv', newline='') as csvfile:
  dialect=csv.Sniffer().sniff(csvfile.read(1024))
  csvfile.seek(0)
  reader=csv.DictReader(csvfile, dialect, fieldnames = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume'])
  for row in reader:
      for Date, Open, High, Low, Close, Volume in row:
          print("{}: {}".format(Date, Close))

希望有所帮助....