Тип файла из pandas .DataFrame.to_excel - «Данные архива Zip, по крайней мере v2.0 для извлечения» - PullRequest
0 голосов
/ 30 января 2020

Я заметил, что тип файла из файла Excel, сгенерированного pandas.DataFrame.to_excel, равен Zip archive data, at least v2.0 to extract. Обратите внимание, что с типом содержимого все в порядке: content_type, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.

В моем проекте Django я по существу проверяю тип файла перед обработкой загруженного файла, и хотя файл, созданный с помощью pandas.DataFrame.to_excel, является действительный файл Excel, модуль проверки отклоняет загруженный файл из-за типа файла Zip archive data, at least v2.0 to extract вместо Microsoft Excel 2007+.

Пожалуйста, дайте мне знать, как я могу обойти эту проверку.

Код, который я использовал для репликации (т. Е. Для создания файла Excel с типом файла Zip archive data, at least v2.0 to extract), эта проблема здесь.

import pandas as pd
import os
import magic

uploaded_file_path = r'somepath'
path, filename = os.path.split(uploaded_file_path)
filename_without_extension = os.path.splitext(filename)
new_file_name = os.path.join(path, filename_without_extension[0]) + '_TESTING_BLAH_' + str(1) + '.xlsx'


df1 = pd.DataFrame([['a', 'b'], ['c', 'd']],
                   index=['row 1', 'row 2'],
                   columns=['col 1', 'col 2'])

df1.to_excel(new_file_name)

file_type = magic.from_file(new_file_name)
print(file_type)

1 Ответ

1 голос
/ 31 января 2020

Как подозревается, поведение, похоже, связано с тем, как создаются файлы Excel. Файлы xlsx, созданные библиотеками с открытым исходным кодом, имеют разный магический номер c, чем файлы xlsx, созданные в MS Excel. Подобную проблему можно найти здесь . Используемый по умолчанию dB libmagic явно не распознает эти файлы как файлы Excel.

В сообщении также описывается возможное решение. Вы можете добавить пользовательские определения в файл /etc/magic. И есть файл, который вы можете скопировать и вставить, который, кажется, работает.

Поэтому скопируйте содержимое этого msooxml файла в файл /etc/magic на вашем компьютере. После этого файлы были идентифицированы как Excel 2007 на моем компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...