Python:文件不读取整个文件,io.FileIO确实 - 为什么?

Mar*_*cin 6 python io

以下代码在Windows上的 python 2.7.2中执行,只读取基础文件的一小部分:

import os

in_file = open(os.path.join(settings.BASEPATH,'CompanyName.docx'))
incontent = in_file.read()
in_file.close()
Run Code Online (Sandbox Code Playgroud)

而这段代码工作得很好:

import io
import os

in_file = io.FileIO(os.path.join(settings.BASEPATH,'CompanyName.docx'))
incontent = in_file.read()
in_file.close()
Run Code Online (Sandbox Code Playgroud)

为什么不同?从我对文档的阅读中,它们的表现应该相同.

Tim*_*ker 12

您需要以二进制模式打开文件,否则read()将停在它找到的第一个EOF字符处.并且a docx是一个ZIP文件,保证在某处包含这样的字符.

尝试

in_file = open(os.path.join(settings.BASEPATH,'CompanyName.docx'), "rb")
Run Code Online (Sandbox Code Playgroud)

FileIO读取原始字节流,默认情况下为"二进制".

  • +1.正如Python 2.7文档,[7.2.*读取和写入文件*],说:"Windows上的Python区分文本和二进制文件;文本文件中的行尾字符在读取或写入数据时会自动稍微改变.这在幕后修改... [将] ...损坏`JPEG`或`EXE`文件中的二进制数据.在读取和写入这些文件时要非常小心使用二进制模式.在Unix上,附加一个并不会有害`'b'到模式,所以你可以独立于平台使用所有二进制文件." (3认同)