python3如何读取python2的npy⽂件
python在线编辑器python3
python3读取python2打包的npy⽂件会报错,原因是编码⽅式不同,所以只要在读取的时候加上编码⽅式即可。
解决⽅法
docs_train = np.load('./data/20news_py', allow_pickle=True, encoding='bytes')
docs_test = np.load('./data/20news_py', allow_pickle=True, encoding='bytes')
路径中的⽂件是python2打包的。
补充:在Python 3中加载Python 2 .npy⽂件时出错
我有.npy⽂件,它们是使⽤Python 2.7.9和Numpy版本1.11.3通过命令创建的np.save('filename')。这些⽂件是在外部计算机上⽣成的,该外部计算机是我们研究所的linux集的⼀部分。
我将⽂件复制到本地计算机上,以便通过导⼊它们np.load('filename.npy')。在我的本地计算机上,我正在运⾏带有Jupyter-Notebook的Python 3.5.2和Numpy版本1.13.0。
本地操作系统是Ubuntu 16.04.2。
当我尝试在本地加载⽂件时,出现错误:
ValueError: invalid literal for int() with base 16
简单的边框图片
浏览了⼀些Stackoverflow问题后,我尝试使⽤以下⽅式指定编码:
np.load('filename.npy',encoding='latin1')
这给出了相同的错误。encoding='bytes'产量:
TypeError: can't multiply sequence by non-int of type 'float'
这是Traceback的较⼤⽚段:
/usr/local/lib/python3.5/dist-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
417      else:
418        ad_array(fid, allow_pickle=allow_pickle,
--> 419                    pickle_kwargs=pickle_kwargs)
420    else:
421      # Try a pickletransaction怎么记
attribute sth to sb造句/usr/local/lib/python3.5/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
638      pickle_kwargs = {}
639    try:
--> 640      array = pickle.load(fp, **pickle_kwargs)
641    except UnicodeError as err:
642      if sys.version_info[0] >= 3:
/usr/local/lib/python3.5/dist-packages/sympy/core/numbers.py in __new__(cls, num, prec)
823        else:
824          _mpf_ = mpmath.mpf(
--> 825            S.NegativeOne**num[0]*num[1]*2**num[2])._mpf_
826    elif isinstance(num, Float):
827      _mpf_ = num._mpf_
编程猫下载手机
TypeError: can't multiply sequence by non-int of type 'float'
我猜想在Python和Numpy版本之间的转换时,编码有问题。关于如何导⼊⽂件的任何想法?
解决⽅案
如中所⽰,*。npy中数据的存储⽅式是什么?,.npy⽂件为字节码,如果您在⼗六进制编辑器中打开⼀个字节码,则会看到该⽂件。
Python 2字节码.pyc,.pyo⽂件⽆法在Python 3中运⾏,因为虚拟机和编译器内部版本已随主要版本更改。
socket实验报告总结同样,NumPy的C内部结构和字节码编译器在Python 3中也发⽣了变化,从⽽破坏了向后兼容性。(
这是有意的,因为字节码
并不是要持续那么长时间,或者不能与所创建的版本⼀起使⽤。)
这些变更的组成意味着,如果不对Python 3的字节码解释器和Python 3的NumPy进⾏⼤的更改,和/或从Python 2 NumPy字节码到Python 3的转译器,则⽆法使⽤这些Python 2 .npy⽂件。 Python 3。
正如我之前提到的,这有点像X / Y问题。您不应该依赖.npy⽂件在各个版本之间⼯作,因为不能保证它们会保持⼀致,因为它们本质上是易失性格式(例如Python VM字节码)。
与其对字节码进⾏逆向⼯程以对其进⾏调试,不如尝试获取⽣成这些⽂件的源。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。