读取CSV文件前n行并将其存储在字典中

5
我有一个CSV文件,想要将其读入字典中,以便稍后插入到名为projects的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文档中的一个示例表明我可以使用csv.DictReader进行迭代:

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

有没有一种方法可以通过使用这些函数来实现我想要做的事情?
1个回答

11

您可以使用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'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接