我最近删除了一个模块xyz,并将其替换为另一个不同名称abc的模块.在某些PICLE文件中,它仍然导入xyz模块.我想将其更改为导入abc模块.我怎么能这样做呢?

我在序列化/反序列化方面没有太多经验.我的理解是,我必须读入PICLE文件(即反序列化),并以某种方式进行更改,然后在更改后再次序列化它.

推荐答案

您可以通过手动更新sys.modulesabc导入为xyz,而不是修改Pickle文件:

import sys

import abc

sys.modules["xyz"] = abc

任何导入xyz的try 都将使用已经加载的xyz模块,它只是abc的别名.

import xyz

>>> print(xyz)
<module 'abc' ...>

在将相关模块插入到sys.modules中之后,您将能够加载旧的Pickle文件,而无需对文件本身进行任何修改.

由于反序列化对象将使用abc的成员加载,如果您立即重新 Select 它们,您将得到一个仅包含对abc(而不是xyz)的引用的PICLE文件.

Python相关问答推荐

GL pygame无法让缓冲区与vertextPointer和colorPointer一起可靠地工作

在Pandas 日历中插入一行

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

如果值不存在,列表理解返回列表

为什么默认情况下所有Python类都是可调用的?

我们可以为Flask模型中的id字段主键设置默认uuid吗

OR—Tools中CP—SAT求解器的IntVar设置值

在pandas中使用group_by,但有条件

如何在表中添加重复的列?

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

寻找Regex模式返回与我当前函数类似的结果

以异步方式填充Pandas 数据帧

pandas:在操作pandora之后将pandora列转换为int

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

在pandas中,如何在由两列加上一个值列组成的枢轴期间或之后可靠地设置多级列的索引顺序,

Django更新视图未更新

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?