【发布时间】:2021-10-24 21:49:56
【问题描述】:
我正在尝试从我正在使用的单元中记录一些数据,以进行长期和短期的数据收集和存储。
我应该使用 json 库还是 pickle 库,然后如何从文件中加载单位的数据,能够对其进行操作、添加单位等,然后将更新的数据保存回文件?
以下是对我的问题以及卡在哪里的详细说明:
对于每个单元,我在类对象中都有一些数据:
unit_1.name = 'unit_1'
unit_1.folder = 'C:\\Users\\Thomas\\Documents\\1'
unit_1.serial_number = 1
unit_1.offsets = [0.00, 0.00, 0.00, 0.00 ...]
unit_1.status = 'Open'
etc
我想将这些对象存储为长期存储(所以在文件中),但我还需要能够通过执行以下操作从命令行将它们作为类对象访问:
>python
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>from file import unit_log
>unit_log.load()
>unit_1.serial_number
1
我想创建这样的新单位:
>unit_2 = unit_log(2)
这将在类的 init 模块中创建其他字段。 之后,我可以通过执行以下操作来保存我创建或修改的单元:
>unit_log.save()
它会将所有单位保存到文件中。这是该类的代码:
file.py
class unit_log:
def __init__ (self, serial_number):
self.serial_number = serial_number;
self.unit_name = 'unit_'+str(serial_number)
self.status = 'Open';
self.offsets = [];
self.folder = 'C:\\Users\\Thomas\\Documents\\' + str(serial_number)
@classmethod
def load (self):
#Something that loads the data
@classmethod
def save (self):
#Something that saves the data
我目前的理解是,我正在尝试做的事情称为序列化/反序列化,并且有几种不同的方法可以做到这一点(主要是 pickle 库和 json 库)。
我的问题是:如何将 json 文件(或 pickle 文件)反序列化为一堆类对象? 我假设 json 文件看起来像这样:
unit_logs.json
{
unit_1:{
{
"unit_name": "unit_1",
"serial_number": 1,
"status": "Open",
"offsets": [],
"folder": "C:\\Users\\Thomas\\Documents\\1"
}
unit_2...
unit_3...
...
}
我会使用log = json.load(unit_logs.json) 加载文件。我想然后有一个
for unit in log:
unit["unit_name"] = unit_log(unit)
但这不是声明变量的方式。
我相信 pickle 库的工作方式类似,但我对那个库不太熟悉。
我应该使用 json 库还是 pickle 库,然后如何从文件中加载单位的数据,能够对其进行操作、添加单位等,然后将更新的数据保存回文件?
【问题讨论】:
-
为什么要用pickle?你的 json 看起来很简单,使用 json 比 pickle 更快
-
我刚读到泡菜是另一种选择。我宁愿使用json,因为我对此了解更多,只是不知道如何将json文件反序列化为如上所述的类对象。
标签: python json serialization deserialization pickle