除latin1、bytes、ASCII外numpy还支持哪些可用编码?
问题解答
为什么未被明确定义的latin编码可以正常使用
numpy官方在源码注释中标注的三类编码,是官方经过完整兼容性测试、保证全场景可用的编码,而非genfromtxt支持的全部编码。你所使用的numpy 1.20.1版本中,npyio.py没有对编码参数做额外的拦截校验,完全依赖Python标准库的编解码能力。genfromtxt的编码参数底层会直接透传给Python标准库的编解码器处理,你观察到的latin可以正常使用,是因为Python标准库中latin本身就是latin1(标准名称为iso-8859-1)的别名,二者实际调用的是同一套编解码逻辑,不存在兼容性差异。你可以通过以下代码验证该对应关系:
import codecs # 输出结果为 iso-8859-1,即latin1的标准命名 print(codecs.lookup('latin').name)
是否存在其他未列明但可正常生效的编码
存在。只要是你当前Python 3.8.8环境支持的所有标准编解码,都可以传入genfromtxt的encoding参数使用,比如常见的utf-8、gbk、gb2312等都能正常完成文件读取。
官方未列明这些编码的原因,是这些编码没有经过numpy团队的全场景兼容性测试,极端场景下如果出现编解码和numpy字节逻辑冲突的问题,官方不会优先做适配修复,普通场景下使用没有问题。
内容的提问来源于stack exchange,提问作者CodeWritter
相关产品推荐
相关产品推荐

