使用python的二进制文件中的EOF

时间:2012-05-14 10:10:46

标签: python binary eof

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

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'

我该怎么做?

2 个答案:

答案 0 :(得分: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变量,因此它不会影响the built-in

答案 1 :(得分:0)

NPE的答案是正确的,但我觉得有必要另外澄清一下。

您尝试使用

之类的内容检测EOF
if (x=='\n'):
    ...

所以你可能会像我今天困惑一样迷茫。

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

更深入解释什么是'EOF'是什么和什么不是'EOF'在这里: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1048865140&id=1043284351