python3 如何读取python2的npy文件

python3读取python2打包的npy文件会报错,原因是编码方式不同,所以只要在读取的时候加上编码方式即可。

解决方法

docs_train = np.load('./data/20news_clean/train.txt.npy', allow_pickle=True, encoding='bytes')
docs_test = np.load('./data/20news_clean/test.txt.npy', 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         return format.read_array(fid, allow_pickle=allow_pickle,
--> 419                     pickle_kwargs=pickle_kwargs)
420     else:
421       # Try a pickle

/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中运行,因为虚拟机和编译器内部版本已随主要版本更改。

同样,NumPy的C内部结构和字节码编译器在Python 3中也发生了变化,从而破坏了向后兼容性。(这是有意的,因为字节码并不是要持续那么长时间,或者不能与所创建的版本一起使用。)

这些变更的组成意味着,如果不对Python 3的字节码解释器和Python 3的NumPy进行大的更改,和/或从Python 2 NumPy字节码到Python 3的转译器,则无法使用这些Python 2 .npy文件。 Python 3。

正如我之前提到的,这有点像X / Y问题。您不应该依赖.npy文件在各个版本之间工作,因为不能保证它们会保持一致,因为它们本质上是易失性格式(例如Python VM字节码)。

与其对字节码进行逆向工程以对其进行调试,不如尝试获取生成这些文件的源。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • python3.7 openpyxl 删除指定一列或者一行的代码

    python3.7 openpyxl 删除指定一列或者一行 # encoding:utf-8 import pandas as pd import openpyxl xl = pd.read_excel(r"E:\55\CRM经营分析表-10001741-1570416265044.xls") xl.to_excel(r"E:\55\crms.xlsx") wk = openpyxl.load_workbook(r"E:\55\crms.xlsx"

  • python3结合openpyxl库实现excel操作的实例代码

    一.相关说明: 1.openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件:2007一下的版本为xls结尾的文件,需要使用 xlrd和xlwt库进行操作 2.excel表的文字编码如果是"gb2312" 读取后就会显示乱码,请先转成Unicode 3.workbook: 工作簿,一个excel文件包含多个sheet. 4.sheet:工作表,一个workbook有多个,表名识别,如"sheet1","sheet2&qu

  • python3.7 openpyxl 在excel单元格中写入数据实例

    本来我是想尝试,选中某个多个单元格复制到同一个sheet的其他位置,找了很多资料没有找到,目前只有这么一个办法,如果有大佬看到,欢迎补充请教. # encoding:utf-8 import pandas as pd import openpyxl xl = pd.read_excel(r"E:\55\CRM经营分析表-10001741-1570416265044.xls") xl.to_excel(r"E:\55\crms.xlsx") wk = openpyxl

  • Python3利用openpyxl读写Excel文件的方法实例

    前言 Python中常用的操作Excel的三方包有xlrd,xlwt和openpyxl等,xlrd支持读取.xls和.xlsx格式的Excel文件,只支持读取,不支持写入.xlwt只支持写入.xls格式的文件,不支持读取. openpyxl不支持.xls格式,但是支持.xlsx格式的读取写入,并且支持写入公式等. 原始数据文件apis.xlsx内容: name method url data json result get接口 get https://httpbin.org/get?a=1&b=

  • python3 使用openpyxl将mysql数据写入xlsx的操作

    编程的生活愈发不容易了,工作越来越难找,说多了都是泪还是给大家贡献些代码比较实际. python3 链接数据库需要下载名为pymysql的第三方库 python3 读写xlsx需要下载名为openpyxl的第三方库 在此我只贡献链接数据库和写入xlsx的代码 import pymysql.cursors from fj.util import logger from openpyxl import Workbook from openpyxl.compat import range from o

  • Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)

    Python中几种常用包比较 2.用xlrd包读取Excel文件 引用包 import xlrd 打开文件 xlrd.open_workbook(r'/root/excel/chat.xls') 获取你要打开的sheet文件 # 获取所有sheet sheet_name = workbook.sheet_names()[0] # 根据sheet索引或者名称获取sheet内容 sheet = workbook.sheet_by_index(0) # sheet索引从0开始 获取指定单元格里面的值

  • python3 如何读取python2的npy文件

    python3读取python2打包的npy文件会报错,原因是编码方式不同,所以只要在读取的时候加上编码方式即可. 解决方法 docs_train = np.load('./data/20news_clean/train.txt.npy', allow_pickle=True, encoding='bytes') docs_test = np.load('./data/20news_clean/test.txt.npy', allow_pickle=True, encoding='bytes')

  • python读取查看npz/npy文件数据以及数据完全显示方法实例

    目录 python读取npz/npy文件 python查看npz/npy文件 附:python-读取和保存npy文件示例代码 总结 python读取npz/npy文件 npz和npy文件都可以直接使用numpy读写. import numpy as np ac = np.load('mydata.npz') ac.files python查看npz/npy文件 要查看其中某一项的数据: M = ac['M'] M 显示的值带省略号,要完全显示,执行: np.set_printoptions(th

  • 解决python3读取Python2存储的pickle文件问题

    我在使用python3.5处理一个序列化文件xxx.pk,不过这个.pk文件是我在python2.7里面存储的,当我用python3读取的时候就会报如下的错误. import pickle picklefile=open('2ohsumed_wmd_d.pk','rb') data=pickle.load(picklefile) print (data) UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 11

  • 用python3读取python2的pickle数据方式

    问题一:TypeError: a bytes-like object is required, not 'str' 解决:该问题属于Python3和Python2的字符串兼容问题,数据文件是在Python2下序列化的,使用Python3读取时,需要将'str'转化为'bytes'. picklefile=open('XXX.pkl','r') class StrToBytes: def __init__(self, fileobj): self.fileobj = fileobj def rea

  • python3读取csv和xlsx文件的实例

    基于win10系统,python3.6 读取csv 使用csv函数包,安装 pip install csv 使用方法: import csv def fileload(filename = '待读取.csv'): csvfile = open(filename, encoding = 'utf-8') data = csv.reader(csvfile) dataset = [] for line in data: dataset.append(line) csvfile.close() ret

  • Python3.7 读取 mp3 音频文件生成波形图效果

    测试环境为Windows 10 系统,Python3.7,转换需要提前安装pydub.ffmpeg,安装和加入环境变量配置方法自行解决,至于缺少的包直接 pip install xx 搞定. 主要是 mp3 转成 wav 格式的文件,因为 mp3 格式为了减小体积牺牲了音质,转成无损的 wav 格式之后,可以读取到更详细的信息.然后读取 wav 的信息,利用 matlotlib 绘图即可. mp3towavaform.py 代码: #coding=utf8 from pydub import A

  • Python3 解决读取中文文件txt编码的问题

    问题描述 尝试用Python写一个Wordcloud的时候,出现了编码问题. 照着网上某些博客的说法添添改改后,结果是变成了"UnicodeDecodeError: 'utf-8' codec can't decode byte-"这个错误. 捣鼓了一天啊,TXT(此处为本人现下内心表情).最后,干脆写个最简单的文件读取,竟然还是报错.于是就考虑是不是txt的编码问题,因为读取的txt文件是在Mac上面新建的纯文本文件,一时没找到在哪里查看编码,最后拷贝到Windows系统上,查看了t

  • python3 循环读取excel文件并写入json操作

    文件内容: excel内容: 代码: import xlrd import json import operator def read_xlsx(filename): # 打开excel文件 data1 = xlrd.open_workbook(filename) # 读取第一个工作表 table = data1.sheets()[0] # 统计行数 n_rows = table.nrows data = [] # 微信文章属性:wechat_name wechat_id title abstr

  • 解决python 读取npy文件太大不能完全显示的问题

    python读取npy文件时,太大不能完全显示,其解决方法 当用python读取npy文件时,会遇到npy文件太大,用print函数打印时不能完全显示,如以下情况: 解决办法 添加一行代码:np.set_printoptions(threshold = 1e6),其中threshold表示输出数组的元素数目 其结果如下: 补充:PyCharm打开大文件时提示文件过大,只显示前一小部分 使用pycharm打开一些大文件时,会出现上述提示,表明文件过大,只能以只读的方式显示前一小部分内容,这种情况显

  • python读取npy文件数据实例

    目录 1. 读取与保存 2. 实战案例 附:python中 .npy文件的读写操作实例 总结 Numpy binary files (NPY, NPZ) 注:.npy文件是numpy专用的二进制文件. 1. 读取与保存 import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) np.save('weight.npy', arr) loadData = np.load('weight.npy') print("----type----&qu

随机推荐