Python: Как использовать DictReader дважды?

Это похоже на очень простой вопрос, но я не могу найти упоминания об этом в другом месте. Я начинаю пользователь Python.

Когда я читаю данные с помощью DictReader, а затем использую словарь, я не могу ссылаться на него снова. Например, используя этот код:

#!/usr/bin/python import csv import cgi import cgitb cgitb.enable() print "<head><title>Title</title></head><body>" f = open("blurbs.csv","rb") blurbs = csv.DictReader(f, delimiter="\t") for row in blurbs: print row for row in blurbs: print row f.close() print "</body>" 

Будет только распечатывать содержимое blurbs.csv один раз. Второй «для строки в рекламных роликах:» ничего не делает. Есть что-то, что мне не хватает? Как я могу сделать словарь в то, что я могу ссылаться повторно?

  • PyQt или PySide - какой из них использовать
  • почему объекты dict не сотрясаются в python?
  • Прочитайте большой текстовый файл в молнии в строке в python
  • Макросы Python: используйте случаи?
  • Загрузите большой XML-файл с помощью библиотеки запросов Python
  • Как создать пустой вектор R для добавления новых элементов
  • Как использовать python timeit при передаче переменных в функции?
  • Как сделать git-слияние pygit2
  • 3 Solutions collect form web for “Python: Как использовать DictReader дважды?”

    Вам просто нужно искать файл в начале:

     with open("blurbs.csv","rb") as f: blurbs = csv.DictReader(f, delimiter="\t") for row in blurbs: print row f.seek(0) for row in blurbs: print row 

    Кроме того, вы можете преобразовать словарь в список dicts и работать с ним:

     with open("blurbs.csv","rb") as f: blurbs = list(csv.DictReader(f, delimiter="\t")) for row in blurbs: print row for row in blurbs: print row 

    В Python (и почти на всех компьютерных языках), если вы хотите что-то хранить, вы должны сделать это явно. Просто распечатать его не держит в любом месте, кроме экрана.

    Чтобы использовать каждый словарь несколько раз, но только по одному, это легко; row уже хранит каждый словарь, по одному за раз:

     for row in blurbs: print row print row print row 

    Чтобы использовать все словари многократно, вам нужно где-то их хранить.

    Они уже в blurbs , но blurbs – это итератор – то, что вы можете перебрать один раз. Как только вы закончите, в нем ничего не останется. Вот почему ваш второй цикл ничего не печатает.

    Вам нужна последовательность – то, что вы можете индексировать, искать, циклически перебирать десятки раз и т. Д. Очевидный тип последовательности для использования, когда нет особых случаев для беспокойства, – это список. Так:

     with open("blurbs.csv","rb") as f: blurbs = csv.DictReader(f, delimiter="\t") rows = list(blurbs) for row in rows: print row print rows[13] for row in rows: print row print sorted(rows) 

    В этом разделе объясняется раздел «Учебник» об Итераторах и в следующих разделах.

    Если вы хотите повторно использовать считыватель, вы можете найти файл обратно в 0. Но если первая строка int csv является заголовками, то это будет частью вывода:

     >>> f = open( 'file.csv', 'rbU' ) >>> reader = csv.DictReader( f ) >>> reader.next() {'col1': '6', 'col2': '0.9', 'col3': '8'} >>> f.seek(0) >>> reader.next() {'col1': 'col1', 'col2': 'col2', 'col3': 'col3'} >>> f.close() 

    DictReader использует первую строку в качестве словарных клавиш (если они не поставляются иным образом). Создание нового объекта-читателя намного проще. Вы также можете скопировать данные в структуру данных, такую ​​как список и цикл.

    Python - лучший язык программирования в мире.