Python使用read停止读取文件

Epi*_*Adv 3 python

我正在尝试读取二进制文件,结果令人困惑.

f = open('foo.dat','r')

data = f.read()

print len(data), f.tell()
Run Code Online (Sandbox Code Playgroud)

输出是:

61, 600
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?只读取前61个字节,但文件对象告诉我我在文件的末尾(文件长度为600字节).文件的其余部分发生了什么?

我只是尝试在Matlab中阅读它并且它读得很好所以我很确定数据文件没问题.

该文档提到了阻塞的一些内容:"请注意,在非阻塞模式下,即使没有给出大小参数,也可能返回的数据少于请求的数据." 我是否处于非阻塞模式?这似乎对文件无关紧要.如何切换到阻止模式?

更新 @John Machin - 是的!谢谢!看起来确实是这样.这是输出:

600, 600
'm\x1aN\x16\x8d\x1e\x96\x10h\x1a'
Run Code Online (Sandbox Code Playgroud)

'\ x1a'肯定在那里.

Joh*_*hin 7

它可能在Windows上,你有一个Ctrl-Z(CP/M文件结束标记,由Windows通过MS-DOS继承).做这个:

f = open('foo.dat','rb') # NOTE b for binary
data = f.read() 
print len(data), f.tell() 
print repr(data[60:70])
Run Code Online (Sandbox Code Playgroud)

并向我们​​展示输出.Ctrl-Z '\x1a'也是chr(26).