Что ты прицепился к этой функции main()? В main() у тебя должен быть только один вызов - process_files(dir, ext, outfile). Дальше в process_files() пишешь и поиск файлов по расширениям, и вызов функции обработки одного файла, и сохранение результатов в общий csv-файл.
Пиши по методу разработки “сверху вниз”: сначала пишешь вызовы функций, как будто они уже написаны, делаешь заглушки для них, якобы эти функции работают, а потом дописываешь тела функций, когда всё правильно работает на макетах функций.
def main():
process_files('/path/dir', 'html', 'output.csv')
def process_files(searchdir, filesext, outfile):
print('process_files():', searchdir, filesext, outfile)
if __name__ == '__main__':
main()
И так пишешь функцию за функцией, спускаясь всё ниже и ниже, пока не дойдёшь до самого дна программы. Там оно всегда наступает в итоге.
На следующем шаге пишешь тело функции process_files() и делаешь заглушки для функций
def main():
process_files('/path/dir', 'html', 'output.csv')
def process_files(searchdir, filesext, outfile):
csvout = open_csv_file(outfile)
files = get_files(searchdir, filesext)
for fname in files:
parsed_data = parse_file(fname)
csv_formed_data = form_for_csv_file(parsed_data)
append_to_csv_file(csvout, csv_formed_data)
close_csv_file(csvout)
def open_csv_file(ifname):
print('open_csv_file()', ifname)
return '<opened csv file>'
def get_files(idir, fext):
print('get_files():', idir, fext)
return ['file1.html', 'file2.html']
def parse_file(ifname):
print('parse_file():', ifname)
return [('node a', 'node b', 'node c'), ('node d', 'node e', 'node f')]
def form_for_csv_file(data):
print('form_for_csv_file()', data)
return [['a', 'b', 'c'], ['d', 'e', 'f']]
def append_to_csv_file(ofp, data):
print('append_to_csv_file()', ofp, data)
def close_csv_file(ifp):
print('close_csv_file()', ifp)
if __name__ == '__main__':
main()
Всё это можно запускать и отлаживать, пока оно не станет правильным.
Дальше продолжаешь каждую функцию дописывать и отлаживать, заменяя заглушки на реальные функции.
tags: developing method from up to down