Python: 文件未完全读取,io.FileIO却能 - 为什么?

7 投票
1 回答
4245 浏览
提问于 2025-04-17 11:58

下面这段代码在 Windows 上的 Python 2.7.2 中执行时,只能读取文件的一部分:

import os

in_file = open(os.path.join(settings.BASEPATH,'CompanyName.docx'))
incontent = in_file.read()
in_file.close()

而这段代码则运行得很好:

import io
import os

in_file = io.FileIO(os.path.join(settings.BASEPATH,'CompanyName.docx'))
incontent = in_file.read()
in_file.close()

为什么会有这样的差别呢?根据我对文档的理解,它们应该是一样的效果。

1 个回答

13

你需要以二进制模式打开文件,否则 read() 方法会在遇到第一个结束符(EOF)字符时停止。而 docx 文件其实是一个 ZIP 文件,里面肯定会有这样的字符。

试试这样:

in_file = open(os.path.join(settings.BASEPATH,'CompanyName.docx'), "rb")

FileIO 用来读取原始字节流,这些字节流默认就是“二进制”的。

撰写回答