我有一个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'])
有没有办法通过使用这些功能来完成我想要做的事情?
答案 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'])