我有一个我正在尝试解析的csv文件,当我运行程序时出现list index out of range
错误。
这是原始的csv文件:
test.csv
Date, Time To Process
10/26/2017 7:57:28 PM, 5
10/26/2017 7:57:46 PM, 3
10/26/2017 7:57:47 PM, 1
10/26/2017 7:57:49 PM, 1
10/26/2017 7:57:50 PM, 6
10/26/2017 7:57:52 PM, 5
这是我的代码:
import csv
with open('test.csv', 'rb') as n:
has_header = csv.Sniffer().has_header(n.read(1024))
n.seek(0)
reader = csv.reader(n)
if has_header:
next(reader)
dates = []
timeToProcess = []
for row in reader:
print row
values = row[0].split(',')
dates.append(values[0])
timeToProcess(values[1])
这将只打印csv文件的第一行,然后输出错误timeToProcess.append(values[1]) IndexError: list index out of range
如果我更改csv文件以在每行周围加上引号,则一切都按预期工作。为什么这样,有没有办法让这个程序在没有csv文件中的引号的情况下运行?
test.csv (有效的,带引号)
Date, Time To Process
"10/26/2017 7:57:28 PM, 5"
"10/26/2017 7:57:46 PM, 3"
"10/26/2017 7:57:47 PM, 1"
"10/26/2017 7:57:49 PM, 1"
"10/26/2017 7:57:50 PM, 6"
"10/26/2017 7:57:52 PM, 5"
答案 0 :(得分:4)
您正在使用csv.reader
和手动拆分行。这不是必需的 - csv
模块的工作是为您隔离“单元格”(即使它们包含逗号或换行符等元字符)。只是做
with open('test.csv', 'rb') as n:
# ...
for row in reader:
dates.append(row[0])
timeToProcess(row[1]) # maybe better int(row[1])?
另外,请注意PEP-8 (Style Guide for Python code) - 每个缩进级别有4个空格。
答案 1 :(得分:2)
如果我更改csv文件以在每行周围加上引号,那么一切都按预期工作
如果正确提取列,则不应该这样。如果在整行中放置引号,则只有一列。
values = row[0].split(',') # You are reading the first column, then splitting columns
dates.append(values[0]) # First part of the first column
timeToProcess(values[1]) # Second part of the first column
如果你想正确地做,你可以尝试
for row in reader:
print row
dates.append(row[0])
timeToProcess(row[1])
如果您希望标题能够提取列值,请使用DictReader或pandas
库。
要重新解释您的问题为什么需要在csv文件中添加引号?,因为列本身可以有逗号,您应该转义该列。