为什么我需要在这个csv文件中添加引号?

2024-05-13 22:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图解析一个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文件中不加引号的情况下运行?你知道吗

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

Tags: 文件ofcsv程序indexout引号list
2条回答

If I change the csv file to have quotes around each row, everything works as expected

如果您正确提取了列,则不应该这样做。如果在整行加引号,则只有一列。你知道吗

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

如果希望头能够提取列值,请使用DictReaderpandas库。你知道吗

重新表述您的问题为什么需要在csv文件中添加引号?,因为列本身可以有逗号,您应该转义该列。你知道吗

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

相关问题 更多 >