将CSV的前n行读入字典

Chu*_*uck 4 python csv dictionary python-3.x

我有一个CSV文件,我想读入一个字典,以便随后插入一个名为projects的MongoDB集合.

我用以下方法完成了这项工作:

with open('opendata_projects.csv') as f:
    records = csv.DictReader(f)
    projects.insert(records)
Run Code Online (Sandbox Code Playgroud)

但是,我发现我糟糕的沙盒帐户无法容纳所有数据.反过来,我想读前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)
Run Code Online (Sandbox Code Playgroud)

其后是错误:

TypeError: unorderable types: dict() <= int()
Run Code Online (Sandbox Code Playgroud)

这促使我进一步研究字典,我发现它们是无序的.然而,似乎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'])
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 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'])
Run Code Online (Sandbox Code Playgroud)

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


除此之外,如果你想自己计算,你可以使用这样的enumerate功能

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