Python在使用read时停止读取文件
我正在尝试读取一个二进制文件,但结果让我感到困惑。
f = open('foo.dat','r')
data = f.read()
print len(data), f.tell()
输出是:
61, 600
这是怎么回事?我只读取了前61个字节,但文件对象却告诉我已经到达文件末尾(这个文件总共有600个字节)。剩下的字节去哪了?
我刚在Matlab中尝试读取这个文件,结果读取得很好,所以我很确定数据文件是没问题的。
文档中提到了一些关于“阻塞”的内容:“请注意,在非阻塞模式下,返回的数据可能少于请求的数据量,即使没有给出大小参数。”我是在非阻塞模式吗?看起来这对文件来说不应该有影响。我该如何切换到阻塞模式呢?
更新
@John Machin - 没错!谢谢你!看起来这确实是发生的情况。以下是输出:
600, 600
'm\x1aN\x16\x8d\x1e\x96\x10h\x1a'
里面确实有'\x1a'。
2 个回答
-1
data
是一个字符串对象,所以 len(data)
告诉你这个字符串的长度,而不是文件的字节长度。
7
这可能是在Windows系统上,并且你有一个Ctrl-Z(这是CP/M的文件结束标记,后来通过MS-DOS被Windows继承了)。你可以这样做:
f = open('foo.dat','rb') # NOTE b for binary
data = f.read()
print len(data), f.tell()
print repr(data[60:70])
然后把结果给我们看看。Ctrl-Z的表示是'\x1a'
,也就是chr(26)
。