如何从CSV文件中读取多个记录?

时间:2015-06-02 12:40:18

标签: python csv

我有一个csv文件,l__cyc.csv,其中包含:

trip_id, time, O_lat, O_lng, D_lat, D_lng
130041910101,1300,51.5841153671,0.134444590094,51.5718053872,0.134878021928
130041910102,1335,51.5718053872,0.134878021928,51.5786920389,0.180940040247
130041910103,1600,51.5786920389,0.180940040247,51.5841153671,0.134444590094
130043110201,1500,51.5712712038,0.138532882664,51.5334949484,0.130489470325
130043110202,1730,51.5334949484,0.130489470325,51.5712712038,0.138532882664

我正在尝试使用以下方法提取单独的值:

with open('./l__cyc.csv', 'rU') as csvfile:
    reader = csv.DictReader(csvfile)
    origincoords = ['{O_lat},{O_lng}'.format(**row) for row in reader]
with open('./l__cyc.csv', 'rU') as csvfile:
    reader = csv.DictReader(csvfile)
    trip_id = ['{trip_id}'.format(**row) for row in reader]
with open('./l__cyc.csv', 'rU') as csvfile:
    reader = csv.DictReader(csvfile)
    destinationcoords = ['{D_lat},{D_lng}'.format(**row) for row in reader]

origincoords应该是51.5841153671, 0.134444590094
trip_id应为130041910101destinationcoords应为
51.5718053872, 0.134878021928

但是,我得到KeyError

KeyError: 'O_lat'

这是一件简单的事吗?我有一些根本的误解吗?

2 个答案:

答案 0 :(得分:2)

您只需避免标题之间的空格

trip_id,time,O_lat,O_lng,D_lat,D_lng 

reader = csv.DictReader(csvfile, skipinitialspace=True)

答案 1 :(得分:2)

首先,您会收到密钥错误,因为密钥在您的字典中不存在。

接下来,我会建议不要在文件中运行3次,这时你可以做一次!

对我而言,当我将字段名添加到读者时,它是有效的。

import csv
from cStringIO import StringIO

src = """trip_id, time, O_lat, O_lng, D_lat, D_lng
130041910101,1300,51.5841153671,0.134444590094,51.5718053872,0.134878021928
130041910102,1335,51.5718053872,0.134878021928,51.5786920389,0.180940040247
130041910103,1600,51.5786920389,0.180940040247,51.5841153671,0.134444590094
130043110201,1500,51.5712712038,0.138532882664,51.5334949484,0.130489470325
130043110202,1730,51.5334949484,0.130489470325,51.5712712038,0.138532882664
"""
f = StringIO(src)

# determine the fieldnames
fieldnames= "trip_id,time,O_lat,O_lng,D_lat,D_lng".split(",")

# read the file
reader = csv.DictReader(f, fieldnames=fieldnames)

# storage
origincoords = []
trip_id = []
destinationcoords = []

# iterate the rows
for row in reader:
    origincoords.append('{O_lat},{O_lng}'.format(**row))
    trip_id.append('{trip_id}'.format(**row))
    destinationcoords.append('{D_lat},{D_lng}'.format(**row))

# pop the header off the list
origincoords.pop(0)
trip_id.pop(0)
destinationcoords.pop(0)

# show the result
print origincoords
print trip_id
print destinationcoords

我真的不知道你想要在那里实现什么,但我确信有更好的方法可以做到这一点!