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) .

  • Python: разрешение отклонено при установке pip
  • ImportError не может импортировать имя BytesIO при импорте caffe на ubuntu
  • Как избежать «self.x = x; self.y = y; self.z = z "в __init__?
  • Импорт из ipython
  • Ящик запроса API Dropbox не работает с Python 3?
  • Расширения для ноутбуков IPython: проблемы с совместимостью b / w calico & jupyter_contrib_nbextensions
  • wxpython 3.0 перерывает старые приложения? (ошибка локали)
  • Использование клиента python websocket с tkinter
  • Python - лучший язык программирования в мире.