Я пытаюсь улучшить процесс с помощью сценария Python, который будет собирать файлы, копировать их в расположение staging_folder, затем считывать данные с листа, добавлять их все вместе, выполнять некоторую очистку и отправлять в Snowflake. Планируется, что это будет полностью автоматизировано, но здесь мы сталкиваемся с проблемами.
Первоначальный шаг работает отлично. У меня есть цикл, который захватывает файлы на основе даты предыдущего рабочего дня и копирует их в промежуточную папку. Обычно каждый день создается 32 файла.
На следующем этапе эти файлы считываются для добавления в кадр данных. Вот функция, которая загружает файлы Excel в мой скрипт Python.
def load_files():
file_list = glob.glob(file_path + r'\*')
df = pd.DataFrame()
print("Importing data to Pandas DF...")
for file in file_list:
try:
wb = load_workbook(file)
ws = wb["Daily Outs"]
data = ws.values
cols = next(data)[1:]
data = list(data)
idx = [r[0] for r in data]
data = (islice(r, 1, None) for r in data)
data_1 = pd.DataFrame(data, index=idx, columns=cols)
df = df.append(data_1, sort=False)
print(file + " Imported to Df...")
except Exception as e:
print("Error: " + e + " When attempting to open file: " + file)
# error_notify(e)
print(df.head(10))
return df
Проблема в том, что у нас есть файлы, которые каким-то образом повреждены. При открытии файлов вручную будет отображаться ошибка, подобная приведенной ниже.

Я думал, что при моей попытке, за исключением того, что приведенный выше код уловит подобную ошибку и предупредит меня с помощью функции error_notify(e). Однако мы получаем результат, когда скрипт Python завершает работу с такой ошибкой: zipfile.BadZipFile: Файл не является zip-файлом
Во время обработки вышеуказанного исключения произошло другое исключение.
Ошибка — это еще не все, но я только скопировал и вставил эту часть при общении с некоторыми людьми в офисе. Невозможно воспроизвести ошибку самостоятельно — я понятия не имею, как файлы повреждаются таким образом — за исключением того, что несколько человек получают доступ к файлам в течение дня.
Способ сделать файл читаемым полностью вручную — мы должны открыть файл, получить эту ошибку, нажать «Да» и сохранить файл поверх существующего. Затем перезапустите скрипт. Но поскольку попытка, кроме не перехватывает ее и не предупреждает нас об ошибке, нам приходится запускать скрипт вручную, чтобы проверить, работает он или нет.
Два вопроса - делаю ли я что-то неправильно в своей попытке, кроме команды? Я, по общему признанию, слаб в обнаружении ошибок, поэтому моя первая мысль: я могу сделать еще больше, чтобы это сработало. Во-вторых, есть ли способ Python обойти эту ошибку в файлах книги Excel?
Вот текст ошибки:
Traceback (последний вызов):
Файл "G:/Replenishment/Reporting/00 - I&A Replenishment/02 - Service
Level/Daily Outs Comment Capture/Python/daily_outs_missed_files.py", строка 48, в load_files
wb = load_workbook(file)
Файл «C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py», строка 314, в load_workbook
data_only, Keep_links)
Файл "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", строка 124, в init
self.archive = _validate_archive(fn)
Файл "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", строка 96, в _validate_archive
archive = ZipFile(filename, 'r')
Файл "C:\ProgramData\Anaconda3\lib\zipfile.py", строка 1222, в init
self._RealGetContents()
Файл "C:\ProgramData\Anaconda3\lib\zipfile.py", строка 1289, в _RealGetContents
raise BadZipFile("Файл не является zip-файлом")
zipfile.BadZipFile: Файл не является zip-файлом
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "G:/Replenishment/Reporting/00 - I&A Replenishment/02 - Service Level/Daily Outs Comment Capture/Python/daily_outs_missed_files.py", line 123, in
main()
File "G:/Replenishment/Reporting/00 - I&A Replenishment/02 - Service Level/Daily Outs Comment Capture/Python/daily_outs_missed_files.py", line 86, in main
df_output = df_clean()
File "G:/Replenishment/Reporting/00 - I&A Replenishment/02 - Service Level/Daily Outs Comment Capture/Python/daily_outs_missed_files.py", line 68, in df_clean
df = load_files()
File "G:/Replenishment/Reporting/00 - I&A Replenishment/02 - Service Level/Daily Outs Comment Capture/Python/daily_outs_missed_files.py", line 61, in load_files
print("Error: " + e + " When attempting to open file: " + file)
TypeError: can only concatenate str (not "BadZipFile") to str