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)
有没有办法通过使用这些功能来完成我想做的事情?
你可以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)