Python3 CSV读取器值错误

Python3 CSV读取器值错误,python,csv,python-3.x,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)

我搜索了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来说是比较新的)


但我知道有一种方法可以用python为每一列指定一个名称;非常感谢您的帮助。

您为什么要分配
换行=''
?这告诉
open()
将每个空字符串视为一行的结尾。请尝试以下操作:
newline='\n'
。或者在不传递换行符的情况下尝试


Vor下面的评论也很有用。在
上打开
以了解更多信息。

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


Vor下面的评论也很有用。有关详细信息,请打开

当您只需要一个for循环时,您有两个for循环:

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

当您只需要一个for循环时,有两个for循环:

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

你很接近,但你需要使用

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

希望这能有所帮助……

你很接近,但你需要使用

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

希望对您有所帮助。

看起来您的文件只有5列。@dano print(len(row))每行返回6列。看起来您的文件只有5列。@dano print(len(row))每行返回6列。我想他可能希望在reader:
中为(日期、打开、高、低、关闭、音量)返回
。是的,这是他的问题。是的,对python(和一般编程)来说有点陌生,还没有我想要的那么高效。感谢您指出这一点,我正在努力开发高效的编码practices@bushc不确定您是否意识到了这一点,但这是导致错误的实际原因。对行中的日期、打开、高、低、关闭、音量执行
实际上是对
行中的六个元素逐一进行迭代。@dano这会减慢速度吗?我不知道为什么这是一件坏事?@bushc的意思是,你现在正在做:
日期、开盘、高、低、收盘、成交量(“6/12/15”、“20.00”、“21.00”、“19.00”、“20.58”、“20”):
这不是你真正想要做的。这将遍历元组,获取每个元素,并尝试将其解压为
日期、打开、高、低、关闭、音量。因此,首先它将尝试解包
“6/12/2014”
,这当然会失败,并导致您看到的
ValueError
。我想他可能希望在reader:
中为(日期、打开、高、低、关闭、音量)设置
。是的,这是他的问题。是的,对python(和一般编程)来说有点陌生,还没有我想要的那么高效。感谢您指出这一点,我正在努力开发高效的编码practices@bushc不确定您是否意识到了这一点,但这是导致错误的实际原因。对行中的日期、打开、高、低、关闭、音量执行
实际上是对
行中的六个元素逐一进行迭代。@dano这会减慢速度吗?我不知道为什么这是一件坏事?@bushc的意思是,你现在正在做:
日期、开盘、高、低、收盘、成交量(“6/12/15”、“20.00”、“21.00”、“19.00”、“20.58”、“20”):
这不是你真正想要做的。这将遍历元组,获取每个元素,并尝试将其解压为
日期、打开、高、低、关闭、音量。因此,首先它将尝试解包
“6/12/2014”
,这当然会失败,并导致您看到的
ValueError
。@Vor说使用newline=''作为文件objects@Vor表示要对文件对象使用换行符=“”谢谢,我会在尝试@dano的修复后检查它。谢谢,我会在尝试@dano的修复后检查它