Skip to main content
 首页 » 编程设计

python之为什么我需要在此 csv 文件中添加引号

2025年05月04日15hnrainll

我有一个要解析的 csv 文件,但在运行程序时出现list index out of range 错误。

这是原始的 csv 文件:

测试.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" 

请您参考如下方法:

您正在使用 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 个空格。