我已经编写了一个代码来读取二进制文件,如下所示:
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'
我该怎么做?
答案 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的答案是正确的,但我觉得有必要另外澄清一下。
您尝试使用
之类的内容检测EOFif (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