Python: 文件未完全读取,io.FileIO却能 - 为什么?
下面这段代码在 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
用来读取原始字节流,这些字节流默认就是“二进制”的。