【问题标题】:Python write object properties to filePython将对象属性写入文件
【发布时间】:2019-03-22 09:18:39
【问题描述】:

我正在使用 Python OOP 解决n-body 模拟问题。我的每个粒子都是一个具有质量、位置、速度等属性的对象,我想每隔几个模拟时间将粒子的属性写入文件。因此,每个粒子都有一个文件,每一行在特定时间都有其属性。因此,例如,我的班级会是这样的,

from numpy import mod

class Particle(object):
    def __init__(self):
        self.idx = 3        # particle id
        self.t = 0.7        # s
        self.mass = 20.     # kg
        self.x = 20.        # m
        self.y = 30.        # m
        self.dt2store = 0.7 # s (simulated time)

    def store(self):
        if mod(self.t, self.dt2store):
            self.writer()

    def writer(self):
        '''
        It stores data in particle id3 file
        data2store = [self.t, self.mass, self.x, self.y]
        '''

最好、更有效的方法是什么?

感谢您的帮助。

【问题讨论】:

    标签: python python-3.x file oop


    【解决方案1】:

    在 python 中,有一个名为 Pickle 的库,它允许您 序列化或反序列化对象。与 JSON 等其他库相比,它的效率不是很高,并且会引发一些安全问题(您可以检查它here)。但它提供了一种使用方法编写和加载对象的简单方法:

    • pickle.dump(obj, file, protocol=None, *, fix_imports=True)
    • pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")

    另一种选择是使用JSON library methods

    • json.dump
    • json.load

    但在这种情况下,您必须将对象转换为 JSON 库接受的某种内置数据类型,例如 dictlisttuple,以防在加载时需要该对象,您将不得不重新创建它。像这样的:

    with open('particle1.json', 'w') as fp:
      json.dump({'idx': particle.idx, 't': particle.t }, fp)
    
    particle = Particle()
    with open('particle1.json', 'r') as fp:
      particle_properties = json.load(fp)
      particle.idx = particle_properties['idx']
      particle.t = particle_properties['t']
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      相关资源
      最近更新 更多