python中二进制和文本不同_在Python中从同一个文件读取二进制和文本

在Python中,如何从同一个文件中读取二进制和文本?我知道如何分别执行这两个操作,并且可以想象非常小心地执行这两个操作,但不能直接使用内置IO库同时执行这两个操作。在

所以我有一个文件,它的格式是大段的UTF-8文本,中间夹杂着二进制数据。文本前面没有写入长度,也没有像“\0”这样从二进制数据中描述它的特殊字符,当解析表示“我们即将结束”时,有很大一部分文本接近结尾。在

最好的解决方案是让内置的文件读取类有“read(n)”和“read_char(n)”方法,但可惜它们没有。我甚至不能打开文件两次,一次是文本,一次是二进制,因为文本1上tell()的返回值不能以任何有意义的方式与二进制文件一起使用。在

所以我的第一个想法是把整个文件以二进制的形式打开,当我看到一个文本块时,逐个字符地读它,直到我意识到文本结束,然后继续以二进制的形式读取它。然而,这意味着我必须逐字节读取并自己解码UTF-8字符(是否需要在对该字符执行操作之前读取另一个字节?)。如果它是一个固定宽度的字符编码,我会每次读那么多字节。最后,我还希望Python文本阅读器支持通用的行结尾,但是在逐字节读取时,实现这一点会更加困难。在

另一个更简单的解决方案是,我可以询问文本文件对象在文件中的实际偏移量。光是这样就可以解决我所有的问题。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值