Python 如何检查浏览的文件是.xlsx还是.csv?
我正在使用openpyxl模块,但现在发现它不支持csv格式。那么,我如何区分传入的文件是.xlsx格式还是.csv格式?我想您有一个文件名,然后可以使用:Python 如何检查浏览的文件是.xlsx还是.csv?,python,Python,我正在使用openpyxl模块,但现在发现它不支持csv格式。那么,我如何区分传入的文件是.xlsx格式还是.csv格式?我想您有一个文件名,然后可以使用: ".xlsx" in filename 至少在xlsx的情况下,您可以非常确信,如果它失败了,那么它就不是xlsx。CSV是一种非常原始的格式,几乎所有东西都可以这样处理,但我认为这是您可以从中挤出的最大值。如果您使用的是OSX/Linux,则可以使用file命令 文件sample.xlsx sample.xlsx:Microsoft E
".xlsx" in filename
至少在xlsx的情况下,您可以非常确信,如果它失败了,那么它就不是xlsx。CSV是一种非常原始的格式,几乎所有东西都可以这样处理,但我认为这是您可以从中挤出的最大值。如果您使用的是OSX/Linux,则可以使用file命令 文件sample.xlsx sample.xlsx:Microsoft Excel 2007+ 文件sample.csv sample.csv:ASCII文本 如果您在Windows上,则可以安装
我认为最好的方法是以二进制模式检查文件内容的前四个字节,以检查是否存在类似zip的文件
xlsx
文件(和其他存档文件)的“幻数”为50 4B 03 04
(十六进制)-有关许多其他所谓的“幻数”的列表,请参阅
在Python中,我们可以将50 4B 03 04
表示为b'PK\x03\x04'
,因此我们可以创建一个函数来加载文件,读取前四个字节,并检查它们是否是这个神奇的数字:
filename1 = "test.xlsx"
if is_xlsx(filename1):
print(filename1, "is an Excel file!")
# load it openpyxl
else:
print(filename1, "is an CSV file!")
# load it with csv
filename2 = "test.csv"
if is_xlsx(filename2):
print(filename2, "is an Excel file!")
# load it openpyxl
else:
print(filename2, "is an CSV file!")
# load it with csv
输出(可能是意外的):
归根结底,将文件定义为特定格式的唯一方法是能够将其解析为特定格式。扩展是常规的,但是任意的。仅仅因为扩展名为
.csv
的文件并不意味着它实际上是一个csv文件,并且仅仅因为文件没有扩展名.csv
也不意味着它不是一个csv文件。我想你可以检查一下xlsx的幻数是否在开头。。。
test.xlsx is an Excel file!
test.csv is an CSV file!