Python3 CSV 读取器值错误

0 投票
3 回答
560 浏览
提问于 2025-04-18 09:35

我在查找关于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 个回答

1

你为什么要把 newline='' 这样设置呢?这会告诉 open() 把每个空字符串都当作一行的结束。试试这样: newline='\n'。或者可以不传 newline 参数。

Vor 下面的评论也很有用。想了解更多信息,可以查看 open 的文档

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))

希望这能帮到你……

3

你这里用了两个循环,其实只需要一个就够了:

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

撰写回答