1

我需要检测文件句柄是使用二进制模式还是文本模式 - 这是为了能够编码/解码 str/bytes 所必需的。我怎样才能做到这一点?

使用二进制模式myfile.write(bytes)时有效,而在文本模式下myfile.write(str)有效。

这个想法是我需要知道这一点,以便能够在调用 myfile.write() 之前对参数进行编码/解码,否则它可能会因异常而失败。

4

2 回答 2

4

http://docs.python.org/library/stdtypes.html#file.mode

>>> f = open("blah.txt", "wb")
>>> f
<open file 'blah.txt', mode 'wb' at 0x0000000001E44E00>
>>> f.mode
'wb'
>>> "b" in f.mode
True

有了这个警告:

文件模式

文件的 I/O 模式。如果文件是使用 open() 内置函数创建的,这将是 mode 参数的值。这是一个只读属性,可能不会出现在所有类似文件的对象上。

于 2010-08-31T16:35:58.887 回答
1

如何以这种方式解决您的问题:

try:
    f.write(msg)
except TypeError:
    f.write(msg.encode("utf-8"))

即使您的句柄不提供.mode.

于 2010-09-01T09:34:33.437 回答