如何确定文件是以二进制还是文本模式打开?

jdm*_*jdm 7 python

给定一个文件对象,如何确定它是以字节模式(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)