将CSV的前n行读入字典

时间:2015-04-28 06:04:51

标签: python csv python-3.x dictionary

我有一个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 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 个答案:

答案 0 :(得分:9)

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