我正在尝试从我正在处理的单元中记录一些数据,以进行长期和短期数据收集和存储。
我应该使用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库?如何从文件加载单位数据、能够操作它们、添加单位等,然后将更新后的数据保存回文件?