【发布时间】:2019-08-29 22:47:39
【问题描述】:
我正在将一些代码从 python 2 升级到 python 3。
有打开和读取文件的功能。在 Python 2 中,无需指定二进制模式或字符串。在 Python 3 中,我应该指定模式。
python 2 代码为:
with open(f_path, mode=open_mode) as fp:
content = fp.read()
这给我带来了问题,因为它被各种其他函数调用,而我不一定事先知道文件类型。 (有时数据被写入 zip 文件,有时数据通过 HTTP 端点返回)。
我预计大多数数据将是二进制图像文件,但也会出现 CSV 和文本文件。
打开未知类型的文件并检测它是二进制数据还是字符串数据的最佳方法是什么?
是否可以例如以二进制模式打开文件,然后检测到它包含文本并转换它(或者生成异常并改为以字符串模式打开)?
【问题讨论】:
-
您是否担心除 ASCII/UTF-8 之外的任何替代编码?如果是这样,请使用 chardet。如果没有,那么就按照下面的建议使用 binaryornot。
-
我希望大多数文本文件都以 UTF-8 编码,尽管用户可以上传他们需要的任何内容。我将尝试使用 binaryornot 看看是否可行。
标签: python-3.x file