Python3 CSV读取器值错误
我搜索了python csv问题,似乎找不到任何解决读者错误的方法 我有一个包含6列的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)
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的修复后检查它