Python csv пропускает первые две пустые строки

Прежде чем кто-либо отметит это как дубликат, я попробовал все: от isspace, startswith, itertools filterfunction, readlines () [2:]. У меня есть скрипт Python, который ищет сотни файлов CSV и печатает строку с соответствующей строкой (в данном случае уникальным идентификатором) в восьмом столбце слева.

import csv import glob csvfiles = glob.glob('20??-??-??.csv') for filename in csvfiles: reader = csv.reader(open(csvfiles)) for row in reader: col8 = str(row[8]) if col8 == '36862210': print row 

Код работает с тестовыми .csv-файлами. Тем не менее, реальные .csv-файлы, с которыми я работаю со всеми, имеют пустые первые две строки. И я получаю это сообщение об ошибке.

IndexError: индекс индекса за пределами диапазона

Вот мой последний код:

 import csv import glob csvfiles = glob.glob('20??-??-??.csv') for filename in csvfiles: reader = csv.reader(open(csvfiles)) for row in reader: if not row: continue col8 = str(row[8]) if col8 == '36862210': print row 

2 Solutions collect form web for “Python csv пропускает первые две пустые строки”

Попробуйте пропустить первые две строки, используя next команду:

 import csv import glob csvfiles = glob.glob('20??-??-??.csv') for filename in csvfiles: reader = csv.reader(open(filename)) next(reader) next(reader) for row in reader: col8 = str(row[8]) if col8 == '36862210': print row 

Считыватель csv принимает итерабельность , которая может быть файловым объектом, но не должна быть.

Вы можете создать генератор, который удаляет все пустые строки из файла следующим образом:

 csvfile = open(filename) filtered_csv = (line for line in csvfile if not line.isspace()) 

Этот генератор filter_csv будет лениво вытаскивать по одной строке за один раз из вашего файлового объекта и переходить к следующему, если строка полностью пробельная.

Вы должны написать свой код:

 for filename in csvfiles: csvfile = open(filename) filtered_csv = (line for line in csvfile if not line.isspace()) reader = csv.reader(filtered_csv) for row in reader: col8 = str(row[8]) if col8 == '36862210': print row 

Предполагая, что непустые строки хорошо сформированы, т. IndexError Все имеют 8-й индекс, вы не должны получать IndexError .

EDIT : Если вы все еще сталкиваетесь с IndexError это, вероятно, не из-за строки, состоящей только из пробелов. Поймайте исключение и посмотрите на строку:

 try: col8 = str(row[8]) if col8 == '36862210': print row except IndexError: pass 

для проверки вывода из CSV-ридера, который фактически вызывает ошибку. Если строка – это объект, который не печатает его содержимое, вместо этого print list(row) .

  • множественное разделение в строке с использованием регулярного выражения
  • Функции обработки писем PyMongo с генераторами
  • Автозаполнение и вкладка в PDB
  • В чем разница между частичной подгонкой и теплым началом?
  • Python тот же символ не равен
  • объединить несколько строк в одну строку в пандах
  • ошибка памяти при разбиении большого файла на более мелкие файлы в python
  • Используя модуль запросов, как обрабатывать «set-cookie» в ответе на запрос?
  • Изменение URL-адреса реферера в запросах python
  • Как создать регулярный словарь смайликов в python?
  • Python: ImportError: /usr/local/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyUnicodeUCS2_Replace
  • Python - лучший язык программирования в мире.