逐行读取csv文件

问题描述:

我使用Python v2.7(请不要问我使用Python v3)。我有一个csv文件,它的内容是这样的:逐行读取csv文件

name age gender height 
John 30 male 180 
Kate 23 female 166 
... 

我使用csv模块。我试图通过行用下面的代码读取内容行:

import csv 

with open("data.csv", 'r') as data_file: 
    reader = csv.reader(data_file, delimiter='\t') 
    # ERROR: ValueError: need more than 2 values to unpack 
    for name, age, gender, height in enumerate(reader): 
     print name + ',' + age + ',' + gender + ',' + height 

但我得到的错误,当运行它:

ValueError: need more than 2 values to unpack 

如何摆脱这种错误的?

+0

无关:以二进制方式打开文件('” rb')'在Python 2上(以允许'csv'做自己的换行处理)。 – jfs

枚举的问题返回一个元组 - 项目编号和项目本身。所以它返回两个元素,并强制它解压缩4个元素(检查https://docs.python.org/2/library/functions.html#enumerate)。 尝试将其转换为:

for index, (name, age, gender, height) in enumerate(reader) 

但其实我觉得你不需要一一列举功能,因为你不使用元素的索引。 如果它不起作用,您可以按照文档中的示例简单地访问索引行:https://docs.python.org/2/library/csv.html#csv.reader

您正在以错误的方式使用enumerate()。请参阅此了解更多信息:https://docs.python.org/2.3/whatsnew/section-enumerate.html

关于你的代码,你可以做到以下几点:

import csv 

with open("data.csv", 'r') as data_file: 
    reader = csv.reader(data_file, delimiter='\t')  
    for row in reader: 
    print ', '.join(row) 

import csv 

with open("data.csv", 'r') as data_file: 
    data_file.readline() # Skip first line 
    reader = csv.reader(data_file, delimiter=',') 
    for name, age, gender, height in reader: 
    print name + ',' + age + ',' + gender + ',' + height 

产量

John, 30 , male , 180 
Kate, 23 , female, 166