【问题标题】:EOF in a binary file using python使用python的二进制文件中的EOF
【发布时间】:2012-05-14 10:10:46
【问题描述】:

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

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'

我该怎么做?

【问题讨论】:

  • 要添加空行,您可以在循环内简单地print(x + '\n')。我没有看到这与 EOF 有什么关系......
  • 它有错误:TypeError: can't concat bytes to str

标签: python binary eof


【解决方案1】:

一旦到达 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

【讨论】:

  • 我在上面添加了一些解释。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多