将 CSV 的前 n 行读入字典

Posted

技术标签:

【中文标题】将 CSV 的前 n 行读入字典【英文标题】:Reading first n lines of a CSV into a dictionary 【发布时间】:2015-07-06 20:04:54 【问题描述】:

我有一个 CSV 文件,我想将其读入字典,以便随后插入到名为项目的 MongoDB 集合中。

我通过以下方式完成了这项工作:

with open('opendata_projects.csv') as f:
    records = csv.DictReader(f)
    projects.insert(records)

但是,我发现我可怜的沙盒帐户无法保存所有数据。反过来,我想阅读前 n 行,以便我可以处理数据并习惯使用 MongoDB。

首先我检查了 csv.DictReader 函数的文档:

class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

但该函数似乎不允许输入我想要的行数作为参数。

所以我尝试通过编写以下代码来做到这一点:

with open('opendata_projects.csv') as f:
    records = csv.DictReader(f)
    for i in records:
        if i <= 100:
            projects.insert(i)

随后出现错误:

TypeError: unorderable types: dict() <= int()

这促使我进一步查看字典,发现它们是无序的。尽管如此,Python csv docs 的一个示例似乎表明我可以使用 csv.DictReader 进行迭代:

with open('names.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['first_name'], row['last_name'])

有没有办法通过使用这些功能来完成我想做的事情?

【问题讨论】:

【参考方案1】:

你可以使用itertools.islice,像这样

import csv, itertools

with open('names.csv') as csvfile:
    for row in itertools.islice(csv.DictReader(csvfile), 100):
        print(row['first_name'], row['last_name'])

islice 将从您传递的可迭代对象创建一个迭代器,它允许您迭代直到限制,您作为第二个参数传递。


除此之外,如果你想数自己,你可以使用enumerate函数,像这样

for index, row in enumerate(csv.DictReader(csvfile)):
    if index >= 100:
        break
    print(row['first_name'], row['last_name'])

【讨论】:

以上是关于将 CSV 的前 n 行读入字典的主要内容,如果未能解决你的问题,请参考以下文章

如何将csv读入python中的字典?

将 CSV 值读入列表字典的大多数 Pythonic 方式

从两个熊猫系列(csv的列作为DataFrame)创建元素字典

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

将字典列表写入 CSV Python

将 csv.DictReader 对象转换为字典列表?