在Python中,如何从同一个文件中读取二进制和文本?我知道如何分别执行这两个操作,并且可以想象非常小心地执行这两个操作,但不能直接使用内置IO库同时执行这两个操作。在
所以我有一个文件,它的格式是大段的UTF-8文本,中间夹杂着二进制数据。文本前面没有写入长度,也没有像“\0”这样从二进制数据中描述它的特殊字符,当解析表示“我们即将结束”时,有很大一部分文本接近结尾。在
最好的解决方案是让内置的文件读取类有“read(n)”和“read_char(n)”方法,但可惜它们没有。我甚至不能打开文件两次,一次是文本,一次是二进制,因为文本1上tell()的返回值不能以任何有意义的方式与二进制文件一起使用。在
所以我的第一个想法是把整个文件以二进制的形式打开,当我看到一个文本块时,逐个字符地读它,直到我意识到文本结束,然后继续以二进制的形式读取它。然而,这意味着我必须逐字节读取并自己解码UTF-8字符(是否需要在对该字符执行操作之前读取另一个字节?)。如果它是一个固定宽度的字符编码,我会每次读那么多字节。最后,我还希望Python文本阅读器支持通用的行结尾,但是在逐字节读取时,实现这一点会更加困难。在
另一个更简单的解决方案是,我可以询问文本文件对象在文件中的实际偏移量。光是这样就可以解决我所有的问题。在