【问题标题】:Reading first n lines of a CSV into a dictionary将 CSV 的前 n 行读入字典
【发布时间】: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'])

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

【问题讨论】:

    标签: python csv python-3.x dictionary


    【解决方案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'])
    

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多