1

我编写了一个代码来读取二进制文件,如下所示:

file=open('myfile.chn','rb')  
i=0  
for x in file:  
   i=i+1  
   print(x)  
file.close()

结果如下(其中一部分):b'\x00\x00\x80?\x00\x00\x00\x005.xx\x00S\xd4\n'

如何检测此二进制文件的 EOF?假设我想在找到 EOF 后打印()。我试过这个,但什么也没发生。

if (x=='\n'):
print()

(更新)

@aix:假设文件有几行结果,就像示例一样,每行末尾都有'\ n',我想在每行之间放置一个空格。

b'\x00\x00\x80?\x00\x00\x00\x005.xx\x00S\xd4\n'

b'\x82\x93p\x05\xf6\x8c4S\x00\x00\xaf\x07j\n'

我怎样才能做到这一点?

4

2 回答 2

6

一旦到达 EOF,for x in file:循环将终止。

with open('myfile.chn', 'rb') as f:
   i = 0
   for x in f:
      i += 1
      print(x)  
print('reached the EOF')

我已经重命名了file变量,这样它就不会影响内置的.

于 2012-05-14T10:13:08.727 回答
0

NPE 的回答是正确的,但我觉得有必要进行一些额外的澄清。

您尝试使用类似的方法检测 EOF

if (x=='\n'):
    ...

所以可能你和我直到今天一样困惑。

EOF 不是字符或字节。它不是存在于文件末尾的值,也不是可能存在于某些(甚至是二进制)文件中间的东西。在 C 世界中 EOF 有一些价值,但即使在那里,它的价值也不同于任何 char 的价值(甚至它的类型也不是 'char')。但在 python 世界中,EOF 意味着“到达文件结尾”。“读取”函数的 Python 帮助说“......读取并返回所有数据,直到 EOF”,这并不意味着“直到找到 EOF 字节”。这意味着“直到文件结束”。

关于什么是“EOF”和什么不是“EOF”的更深入解释如下:http: //faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1048865140&id= 1043284351

于 2016-08-11T10:23:20.533 回答