PirateNOX 2025-08-02 17:30 采纳率: 85.7%
浏览 6

linux下有没有无视文件后缀名的读取excel文档的python库

如题:
linux下有没有无视文件后缀名的读取excel文档的python库?
因为我使用的文档是xlsx格式的,但命名时不能将他命名为.xlsx为后缀名的文件名。
导致openpyxl用不了,它会首先判断文件类型。

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-08-02 17:31
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在 Linux 系统下,确实有一些 Python 库可以无视文件后缀名来读取 Excel 文档(如 .xlsx.xls 格式)。这些库通过文件内容的魔数(magic number)文件格式的特征来识别文件类型,而不是依赖文件扩展名。


    推荐的解决方案

    以下是几种可以在 Linux 下忽略文件后缀名 读取 Excel 文件的 Python 库和方法:

    1. 使用 pandas + openpyxlxlrd

    虽然 openpyxlxlrd 本身会检查文件扩展名,但你可以手动指定引擎,从而绕过对文件后缀的判断。

    ✅ 示例代码:

    import pandas as pd
    
    # 假设你的文件是 "data" 而不是 "data.xlsx"
    file_path = "data"
    
    # 手动指定引擎为 openpyxl(适用于 .xlsx)
    df = pd.read_excel(file_path, engine='openpyxl')
    
    print(df)
    

    注意: 如果你使用的是 .xls 文件(旧版 Excel),可以将 engine='xlrd'


    2. 使用 pyexcel

    pyexcel 是一个支持多种格式(包括 Excel)的库,它可以根据文件内容自动识别格式,而不依赖文件后缀名

    ✅ 安装:

    pip install pyexcel
    

    ✅ 示例代码:

    import pyexcel as p
    
    # 不管文件名是否带 .xlsx,都可以读取
    book = p.get_book(file_name="data")
    
    for sheet in book:
        print(sheet.name)
        print(sheet.to_array())
    

    优点: 支持 .xls, .xlsx, .ods, .csv 等多种格式。


    3. 使用 openpyxl 直接处理二进制流

    如果你不想依赖第三方库,也可以直接使用 openpyxl 来打开文件流,忽略后缀名

    ✅ 示例代码:

    from openpyxl import load_workbook
    import io
    
    # 假设文件名为 "data",没有 .xlsx 后缀
    file_path = "data"
    
    # 以二进制模式读取文件
    with open(file_path, 'rb') as f:
        file_data = f.read()
    
    # 将二进制数据转换为字节流
    file_stream = io.BytesIO(file_data)
    
    # 使用 openpyxl 读取
    wb = load_workbook(filename=file_stream)
    sheet = wb.active
    
    for row in sheet.iter_rows(values_only=True):
        print(row)
    

    说明: 这种方式完全绕过了文件后缀名的判断,适合需要高度控制的情况。


    4. 使用 python-docx(仅适用于 .xlsx

    虽然 python-docx 主要用于 .docx 文件,但它也能处理 .xlsx 文件的底层结构。不过这并不是推荐的方式。


    🛠️ 总结:推荐方案

    | 方案 | 是否支持忽略后缀名 | 是否推荐 | |------|---------------------|----------| | pandas + openpyxl | ✅ | ✅ | | pyexcel | ✅ | ✅ | | openpyxl + 二进制流 | ✅ | ✅ | | xlrd | ❌(需 .xls 后缀) | ❌ | | python-docx | ❌ | ❌ |


    最终建议

    如果你的文件是 .xlsx 格式,但命名时无法使用 .xlsx 后缀,推荐使用以下两种方法

    ✅ 方法一:使用 pandas + openpyxl

    import pandas as pd
    df = pd.read_excel("data", engine='openpyxl')
    

    ✅ 方法二:使用 pyexcel

    import pyexcel as p
    book = p.get_book(file_name="data")
    

    如果你有更多关于文件格式、编码、或者读取特定列的需求,我也可以进一步帮助你定制代码!

    评论

报告相同问题?

问题事件

  • 创建了问题 8月2日