如何检查浏览的文件是.xlsx还是.csv?

doc*_*ner 1 python

我正在使用 openpyxl 模块,但现在发现它不支持 csv 格式。那么,如何区分传入的文件是.xlsx还是.csv格式

Ed *_*ard 5

我认为最好的方法是以二进制模式检查文件内容的前四个字节,以检查类似 zip 的文件。

xlsx文件(和其他存档文件)将50 4B 03 04(十六进制)作为其“幻数” - 请参阅这篇维基百科文章以获取许多其他所谓“幻数”的列表。

在Python中,我们可以表示50 4B 03 04b'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
Run Code Online (Sandbox Code Playgroud)

输出(也许并不令人惊讶):

test.xlsx is an Excel file!
test.csv is an CSV file!
Run Code Online (Sandbox Code Playgroud)

  • ```def is_xslx(filename): with open(filename, 'rb') as f: first_four_bytes = f.read()[:4] return first_four_bytes == b'PK\x03\x04' ``` (3认同)