gpt4 book ai didi

python - 如何将 Python 原生数据结构存储到文件中或从文件中检索?

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:38 25 4
gpt4 key购买 nike

我正在读取 XML 文件并将所需数据重新组织为 Python 数据结构(列表、元组等)

例如,我的一个 XML 解析器模块生成以下数据:

# data_miner.py
animals = ['Chicken', 'Sheep', 'Cattle', 'Horse']
population = [150, 200, 50, 30]

然后我有一个绘图仪模块,粗略地说,例如:

# plotter.py
from data_miner import animals, population

plot(animals, population)

使用这种方法,我每次绘制时都必须解析 XML 文件。我仍在测试我的程序的其他方面,并且 XML 文件目前不会经常更改。避免解析阶段会大大缩短我的测试时间。

这是我想要的结果:
data_miner.pyplotter.py 之间,我想要一个包含 animalspopulation 的文件,这样它们可以通过 plotter.py native 访问(例如,绘图代码没有变化),而不必每次都运行 data_miner.py。如果可能,它不应采用 csv 或任何 ASCII 格式,而应采用 native 可访问的格式。 plotter.py 现在应该大致如下所示:

# plotter.py

# This line may not necessarily be a one-liner.
from data_file import animals, population

# But I want this portion to stay the same
plot(animals, population)

类比:
这大致相当于 MATLAB 的 save 命令将事件工作区的变量保存到 .mat 文件中。我正在寻找类似于 Python 的 .mat 文件的内容。

最近的经历:
我看过 picklecpickle,但我不确定如何让它工作。如果这是正确的工具,示例代码将非常有帮助。可能还有其他我还不知道的工具。

最佳答案

pickle 模块,或其更快的等效 cPickle,应该能很好地满足您的需求。

具体来说:

# data_miner.py
import pickle

animals = ['Chicken', 'Sheep', 'Cattle', 'Horse']
population = [150, 200, 50, 30]

with open('data_miner.pik', 'wb') as f:
pickle.dump([animals, population], f, -1)

# plotter.py
import pickle

with open('data_miner.pik', 'rb') as f:
animals, population = pickle.load(f)

print animals, population

在这里,我已经使 data_miner.py 非常明确地说明了需要保存的内容(除非您有非常具体的理由不这样做,否则非常明确总是一个好主意)。有些东西(例如模块和打开的文件)无论如何都无法 pickle,因此 globals() 的简单 pickle 是行不通的。

如果绝对必要,您可以复制globals(),同时删除所有类型使它们不适合保存的对象;或者,也许更好的是,虔诚地在您不想保存的每个名称中使用前导_(因此import pickle as _picklewith open ... as _f,等等)并从 globals() 的副本中排除所有带有前导下划线的名称 == 使用这种方法, pickle.load 将检索一个 dict,然后通过索引从中提取感兴趣的变量。但是,我强烈建议使用以下简单的替代方法,即保存 list(或 dict,如果您愿意的话;-),其中的特定值是真正感兴趣的,而不是采取“批发”的方式。

关于python - 如何将 Python 原生数据结构存储到文件中或从文件中检索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com