外包 | py2 下的 pickle 转成 py3 下的 pickle

文章目录

  • 外包 | py2 下的 pickle 转成 py3 下的 pickle
  • 相关文件下载
  • 任务需求
  • 解决思路

相关文件下载

相关文件下载

任务需求

这个老哥不知道哪里搞来的pickle文件, 是在python2.7下保存的, 然后试了一下, 的确在python3.x下打不开, 会报编码错误.

然后到网上查了一些相关资料, 也试了一下网上的方法, 发现在 pickle.load() 这一步的确可以load出来, 比如:

# 在load()里面加加上 encoding='latin1', 或者 encoding='iso-8859-1'
with open('./factor_solve_data.pkl', 'rb') as r:pklData = pickle.load(r, encoding='latin1')
r.close()

这样的话的确可以load出来:

load()出来后可以看到里面是一个大字典, 大字典里面是一个个的 DataFrame, 我尝试一下将其中一个拎出来


结果就是一堆错误, 那应该问题就是 python 2.x 和 python 3.x 的 pickle 和 DataFrame 编码格式不同所导致的.

解决思路

那没办法了, 当时就只能想到一个最简单粗暴的了:

在 python2.x 的环境下:

  1. 先用 pickle 将 pkl 文件 load 出来
  2. 然后用 pandas 将里面的一个个 DataFrame 转成 excel 表格

然后在python3.x的环境下:

  1. 用 pandas 将保存下来的 excel 表格一个个读取成 DataFrame
  2. 然后用 pickle dump保存成新的 pkl 文件
import pandas
import pickle
import os# 这里用 python2.x 来操作 ========================
with open('./factor_solve_data.pkl', 'r') as r:pklData = pickle.load(r)
r.close()
for key, value in pklData.items():      # load()出来后是一个个字典, 用for循环将键值对读取出来value.to_excel('./xlsx/%s.xlsx'%key, encoding='utf-8')        # 将值转成excel, 然后以键的名字来进行命名
# 这里用 python2.x 来操作 ========================# 这里用 python3.x 来操作 ========================
# 仿照原来的pkl文件, 将数据存进一个大字典里
pklDict = {}
for file in os.listdir('./xlsx'):# 读取excel表格, 以第一列作为索引df = pandas.read_excel(f'./xlsx/{file}', index_col=0)# 将excel文件名作为字典的键, file[:-5]是只取名字, 不要后面的 `.xlsx` 后缀pklDict[file[:-5]] = df
with open('py3Data.pkl', 'wb') as w:pickle.dump(pklDict, w)
w.close()
# 这里用 python3.x 来操作 ========================

外包 | py2 下的 pickle 转成 py3 下的 pickle相关推荐

  1. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...

  2. 将windows下编辑好的文件(GBK)转换成Linux下的格式(UTF8)

    背景:一般我们在windows上编辑好的文件默认编码是GBK,而且换行符是^M,为了将这些文件用在linux上,我们一般会将它们转换成Linux下的文件格式,即去掉^M,且将文件格式转换成UTF8. ...

  3. (总结)Linux下多行合并成一行,中间加分隔符

    将某个目录下的文件合并成一行,中间用冒号(:)作为分隔符 1.paste ls lib | sed 's@^@lib/@g' | paste -s -d ":" 2. tr ls  ...

  4. Android 将drawable下的图片转换成bitmap、Drawable

    将drawable下的图片转换成bitmap 1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xx ...

  5. linux下的外接显示器设置成竖屏

    linux下的外接显示器设置成竖屏 用到的软件 系统设置里的Display xrandr 用到的命令 $: xrandr -o left\right 步骤 1.在Display里选择设置的显示器为主显 ...

  6. 将windows下文件编码格式转换成UTF-8 文件编码格式

    将windows下文件编码格式转换成UTF-8 文件编码格式 背景说明: 一个芯片厂商的SDK中的所有文件使用的GB2312的中文编码方式,所以在linux下开发的时候会发现中文的部分都是乱码. 因为 ...

  7. 标准分幅下的图幅号转换成经纬度坐标【原理+源代码】

    最近要批量的把标准分幅下的图幅号转换成经纬度坐标,所以这两天写了个程序来搞定这件事情. 先举个例子说明一下这个程序的作用. 例如:计算出图幅号I50G021040的经纬度范围,即最大经度.最小经度.最 ...

  8. win10 下的输入法切换成繁体的问题解决方案

    win10 下的输入法切换成繁体的问题解决方案 这几天一直很头疼,输入法莫名其妙的就切换为繁体了,而且在搜狗输入法的设置里面设置为简体也是不管用,最后终于找到了问题,由于idea的快捷键 Ctrl + ...

  9. EasyUI-DataGrid下数据库数字替换成文本信息显示以及不同状态显示不同颜色

    EasyUI-DataGrid下数据库数字替换成文本信息显示 在使用easyui作为开发框架的时候,经常遇到一些常见的问题,比如某项数据名,在数据库里存的是0和1等,然后显示在页面上的时候,需要显示成 ...

最新文章

  1. php设置表单的字体,php表单标题怎么设置字体
  2. Git从现有仓库新建干净版本(清除版本commit记录)
  3. 分享Silverlight/WPF/Windows Phone一周学习导读(11月6日-11月12日)
  4. pythonjam怎么使用_jam怎么用啊多多举例子啊各种词意的用法
  5. MySQL连接问题 --- (1251:Client does not support ...)
  6. 问题解决:wireshark之npcap无法安装、winpcap无法安装问题解决
  7. 软考软件设计师下午真题-面向对象的程序设计与实现-组合设计模式(2011年上半年试题六))Java代码讲解
  8. 计算机基础与office应用教程,计算机基础与Office 2010实用教程
  9. 电子签名具备法律效力吗?这些知识点你需要了解
  10. 计算机教育中缺失的一课 - MIT - L5 - 命令行环境
  11. php qq昵称,自写与收集的一些免费的API接口(获取QQ昵称、头像、QQ秀等等...)...
  12. HTML学生个人网站作业设计:电影网站设计——电影购票项目(9页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  13. 连接数据库出现java.lang.NullPointerException
  14. cad批量打印快捷键_原来CAD还能这么打印?批量打印了解一下?1分钟打印100张...
  15. 列表、元组、字典、集合
  16. php laravel入口文件,Laravel 应用的入口:路由系列之基础入门篇
  17. 机械行业ERP系统生产订单管理 分享式操作轻松协同
  18. java 音频转码_javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...
  19. 想学CG原画?112G零基础到大神游戏场景、原画教程免费领取
  20. 三次握手(Three-way Handshake)和四次挥手

热门文章

  1. 【QT】Windows下QT下载安装
  2. Matlab中FFT运算加窗函数的验证
  3. [C++]打开新世界的大门之C++入门
  4. 28行python代码实现哈工大一键申请出校41天
  5. 什么是融资?怎么才能融资?如何实现个人融资?
  6. 互联网产品经理(PM)的工作内容和职责
  7. UML类图的辅助构建的逻辑代码
  8. 解决IE11审查元素面板空白问题
  9. idea下设置git忽略提交ignore
  10. 在vivado中GTP GTH GTZ使用GTGREFCLK时 Vivado_DRC: (REQP-52) 或Vivado_DRC: (REQP-49)错误解决办法