将 CSV 的前 n 行读入字典
Posted
技术标签:
【中文标题】将 CSV 的前 n 行读入字典【英文标题】:Reading first n lines of a CSV into a dictionary 【发布时间】:2015-07-06 20:04:54 【问题描述】:我有一个 CSV 文件,我想将其读入字典,以便随后插入到名为项目的 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】:你可以使用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'])
【讨论】:
以上是关于将 CSV 的前 n 行读入字典的主要内容,如果未能解决你的问题,请参考以下文章
从两个熊猫系列(csv的列作为DataFrame)创建元素字典