给定一个文件对象,如何确定它是以字节模式(read返回bytes)还是以文本模式(read返回str)打开?它应该与阅读和写作一起工作.
换一种说法:
>>> with open('filename', 'rb') as f:
... is_binary(f)
...
True
>>> with open('filename', 'r') as f:
... is_binary(f)
...
False
Run Code Online (Sandbox Code Playgroud)
(听起来与之相关的另一个问题不是.那个问题是关于猜测文件是否是二进制文件而不是它的内容.)
Mar*_*ers 16
文件对象具有以下.mode属性:
def is_binary(f):
return 'b' in f.mode
Run Code Online (Sandbox Code Playgroud)
这限制了对文件的测试; 内存中的文件对象TextIO,BytesIO如果没有该属性.您还可以测试适当的抽象基类:
import io
def is_binary(f):
return isinstance(f, (io.RawIOBase, io.BufferedIOBase))
Run Code Online (Sandbox Code Playgroud)
或反过来
def is_binary(f):
return not isinstance(f, io.TextIOBase)
Run Code Online (Sandbox Code Playgroud)