首页 > 解决方案 > 我将如何编写不使用 DictReader 但获得与使用 DictReader 相同的结果?

问题描述

本质上,假设我的 CSV 文件是这样的:

name,job,age
Michael,Engineer,35
Katie,Doctor,52
Johnny,Physicist,42

然后我想返回这个:

{'name':'Michael','job':'Engineer','age':'35'}
{'name':'Katie','job':'Doctor','age':'52'}
{'name':'Johnny','job':'Physicist','age':'42'}

当然,使用 DictReader 很容易做到这一点,但我想长期这样做。如果不使用 DictReader,我该怎么做呢?

标签: pythonfilecsv

解决方案


您可以通过使用内置zip()函数创建一系列(键,值)对来轻松完成此操作,这些对可以传递给dict()构造函数以为每一行数据创建一个:

from pprint import pprint

def readFile(reader):
    list1 = []
    header = next(reader).strip().split(',')
    for line in reader:
        row = dict(zip(header, line.strip().split(',')))
        list1.append(row)
    return list1

with open('people.csv') as file:
    list1 = readFile(file)
    pprint(list1, sort_dicts=False)

输出:

[{'name': 'Michael', 'job': 'Engineer', 'age': '35'},
 {'name': 'Katie', 'job': 'Doctor', 'age': '52'},
 {'name': 'Johnny', 'job': 'Physicist', 'age': '42'}]

推荐阅读