Вам нужны ежедневные сводки, в которых почасовые файлы объединяются. Хорошо, хорошо.
Создайте дату Ymd regex :
import re
date_re = re.compile(r'^id-(\d{4}-\d{2}-\d{2})-\d{2}\.txt$')
prev_date = None
Теперь в вашем l oop вы можете заменить существующий if
на:
m = date_re.search(file)
if m:
date = m.group(1)
print(f'Working on day {date} ...')
...
prev_date = date
Разобрав дату, теперь вы можете заметить, когда она меняется, возможно, сравнивая, prev_date == date
, и предпринять соответствующие действия, например, записать в новый файл.
Или подумать используя with open(f'output-{date}.txt', 'a') as fout:
, чтобы вы могли добавить к (потенциально уже существующему) файлу. Таким образом, файловая система запоминает вещи за вас, вместо того, чтобы отслеживать большее количество переменных в вашей программе.
Кстати, использование walk()
- это прекрасно, спасибо за это. Но для этого каталога файлов структура достаточно проста, чтобы вы могли использовать glob :
new_list = []
for file in glob.glob('id-*.txt'):
...
EDIT
Предположим, мы начинаем с чистого листа, без вывода files:
$ rm output-*.txt
Затем мы могли бы просто добавить в al oop, аналогично $ cat hour01 hour02 > day31
. Или то же самое, похожее на $ rm day31; cat hour01 >> day31; cat hour02 >> day31
.
m = date_re.search(file)
if m:
date = m.group(1)
print(f'Working on day {date} ...')
with open(file) as fin:
with open(f'output-{date}.txt', 'a') as fout:
fout.write(fin.read())
И все, готово! Мы читаем ежечасный текст и записываем его в конец ежедневного файла.
Я упомянул rm
выше, потому что, если вы отлаживаете и запускаете это дважды или N раз, вы получите с выходным файлом, в N раз большим, чем вы рассчитывали.