Python Dict to CSV: ожидается блок с отступом

Попытка записать вывод в CSV и получить ошибку отступа. Я уверен, что это глупая ошибка, но я не могу понять, почему это происходит.

#!/usr/bin/env python

import csv
import copy
import os
import sys
import glob

#get current working dir, set count, and select file delimiter
os.chdir('/Users/Briana/Documents/Misc./PythonTest')

#parses through files and saves to a dict
series = {}
for fn in glob.glob('*.txt'):
    with open(fn) as f:
        series[fn] = (1 for line in f if line.strip() and not line.startswith('#')) 

print series

#save the dictionary with key/val pairs to a csv
with open('seriescount.csv', 'wb') as f: 
    w = csv.DictWriter(f, series.keys()) #error thrown here
    w.writeheader()
    w.writerow(sum(names.values()))

Полный возврат:

Fri Jul 24 03:13 PM [Briana PythonTest] (dev) $ ./SeriesCount.py 
File "./SeriesCount.py", line 22 
    w = csv.DictWriter(f, series.keys()) 
                                       ^ 
    IndentationError: expected an indented block

1 ответ

Решение

Если вы отправили здесь свой код в точности так, как он есть на вашем компьютере, значит, есть пробелы и вкладки, смешанные вместе. Если я скопирую код в том виде, в котором он указан в вашем вопросе, он будет последовательно выделен пробелами; однако, если я нажимаю "изменить", а затем проверяю код, первые 21 строки имеют отступы, а строки 22-24 - отступы. Код ниже исправляет эту ошибку; позаботьтесь о том, чтобы скопировать его точно так, как оно выглядит здесь:

#!/usr/bin/env python

import csv
import copy
import os
import sys
import glob

#get current working dir, set count, and select file delimiter
os.chdir('/Users/Briana/Documents/Misc./PythonTest')

#parses through files and saves to a dict
series = {}
for fn in glob.glob('*.txt'):
    with open(fn) as f:
        series[fn] = (1 for line in f if line.strip() and not line.startswith('#')) 

print series

#save the dictionary with key/val pairs to a csv
with open('seriescount.csv', 'wb') as f:
    w = csv.DictWriter(f, series.keys()) #error thrown here
    w.writeheader()
    w.writerow(sum(names.values()))

Есть три общие причины IndentationError: expected an indented block:

  • Пренебрегать или забывать делать отступы вообще
  • Закомментирование части блока с отступом
  • Смешивание табуляции и пробелов в отступе
Другие вопросы по тегам