2015-04-28 3 views
3

У меня есть файл CSV, который я хотел бы прочитать в словаре для последующей вставки в коллекцию MongoDB под названием «Проекты».Чтение первых n строк CSV в словаре

Я совершил это со следующим:

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']) 

Есть ли способ сделать то, что я хотел бы сделать с помощью этих функций?

ответ

8

Вы можете использовать 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']) 
Смежные вопросы