Я предлагаю использовать функцию os.path.isfile, чтобы проверить правильность файла для архивации.
Функция os.path.isfile возвращает true, только если путь ведёт к файлу и этот файл существует.
import os
import gzip
def process_file(filename):
if not os.path.isfile(filename):
return
with gzip.open(filename + '.gz', 'wb') as archive, open(filename, 'rb') as f:
archive.write(f.read())
process_file('my/test/file.txt')
В документации также предлагается использовать модуль shutil для копирования содержимого файлов:
import os
import shutil
def process_file(filename):
if not os.path.isfile(filename):
return
with open(filename, 'rb') as f_in, gzip.open(filename + '.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
Однако, для более надёжной работы с файлом рекомендуется использовать конструкцию try except, и конечный результат будет выглядеть примерно так:
import os
import shutil
def process_file(filename):
if not os.path.isfile(filename):
return
try:
with open(filename, 'rb') as f_in:
with gzip.open(filename + '.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
except IOError:
pass # обработка случая, когда файл только что был, но пропал