1

我注意到生成的 Excel 文件的文件类型pandas.DataFrame.to_excelZip 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)

4

1 回答 1

1

怀疑这种行为似乎与创建 Excel 文件的方式有关。xlsx开源库创建的文件与 MS Excel 创建的文件有一个不同的幻数xlsx。可以在此处找到类似的问题。默认的 dBlibmagic使用显然不会将这些文件识别为 Excel 文件。

该帖子还描述了一种可能的解决方案。您可以将自定义定义添加到文件/etc/magic中。您可以复制和粘贴一个文件,该文件似乎有效。

因此,将此 msooxml文件的内容复制到/etc/magic您计算机上的文件中。之后,这些文件在我的机器上被识别为 Excel 2007。

于 2020-01-31T17:39:08.483 回答