python - 使用 xlrd 打开 BytesIO (xlsx)

标签 python xlrd bytesio

我正在使用 Django,需要读取上传的 xlsx 文件的工作表和单元格。使用 xlrd 应该可以,但由于文件必须保留在内存中并且可能无法保存到我不知道如何继续的位置。

本例中的起点是一个带有上传输入和提交按钮的网页。提交后,文件将被 request.FILES['xlsx_file'].file 捕获并发送到处理类,该处理类必须提取所有重要数据以进行进一步处理。

request.FILES['xlsx_file'].file 的类型是 BytesIO,并且 xlrd 由于没有 getitem 方法而无法读取该类型。

将 BytesIO 转换为 StringIO 后,错误消息似乎保持不变 '_io.StringIO' object has no attribute '__getitem__'

    file_enc = chardet.detect(xlsx_file.read(8))['encoding']
    xlsx_file.seek(0)

    sio = io.StringIO(xlsx_file.read().decode(encoding=file_enc, errors='replace'))
    workbook = xlrd.open_workbook(file_contents=sio)

最佳答案

我正在将我的评论移至它自己的答案中。它与更新问题中给出的示例代码(包括解码)相关:

好的,谢谢指点。我下载了xlrd并在本地进行了测试。似乎到达这里的最好方法是向它传递一个字符串,即。 open_workbook(file_contents=xlsx_file.read().decode(encoding=file_enc,errors='replace'))。我误解了文档,但我确信 file_contents= 可以使用字符串。

关于python - 使用 xlrd 打开 BytesIO (xlsx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472681/

相关文章:

python - 使用 asyncio 创建两个并发的异步任务

python - 持久性 where 子句 SQLAlchemy

python - 如何使用xlrd在python中按列名读取Excel数据

python-3.x - 什么时候应该使用 BytesIO .getvalue() 而不是 .getbuffer()?

python-3.x - 如何在fastapi中从内存中返回xlsx文件?

python - Pandas 结合两个数据框将列的子集附加到输出表的行

适用于 Windows 的 Python cron 脚本

Python xlrd数据提取

Python 从 excel 数据创建字典