Python csv到字典,第一行作为标题

时间:2015-06-19 19:43:04

标签: python csv

我有一个带有一些数据的文件file.csv:

fn,ln,tel
john,doe,023322
jul,dap,024322
jab,sac,0485

我想有一个我可以这样访问的数组:

file = 'file.csv'
with open(file,'rU') as f: 
    reader = csv.DictReader(f)

print reader[0].fn

所以我希望它从第一条记录中打印出第一个名字。不幸的是,我收到了这个错误:

ValueError: I/O operation on closed file

我怎样才能完成它,以便我不需要保持文件打开并且我可以使用我的数组。顺便说一句,我不需要在csv文件中回写,我只需要使用数据,为此,我可以修改的数组最好。

1 个答案:

答案 0 :(得分:4)

您需要在with区块内访问阅读器*,而不是在其外部:

file = 'file.csv'
with open(file,'rU') as f: 
    reader = csv.DictReader(f)
    first_row = next(reader)
    print first_row['fn']

只要在代码块之外移动代码,f文件对象就会关闭,您就无法再从阅读器中获取行。这是with陈述的重点。

如果您想随机访问文件中的所有行,请先将阅读器转换为列表:

file = 'file.csv'
with open(file,'rU') as f: 
    reader = csv.DictReader(f)
    all_rows = list(reader)

print all_rows[0]['fn']

list()调用将遍历reader,将每个结果添加到列表对象,直到读取所有行。确保你有足够的内存来容纳所有这些行。