Python将对象属性写入文件

标签 python python-3.x file oop

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

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中,有一个名为Pickle的库这可以让你 序列化或反序列化对象。与其他库(例如 JSON)相比,它的效率不是很高,并且会引发一些安全问题(您可以检查 here )。但它提供了一种使用以下方法编写和加载对象的简单方法:

  • pickle.dump(obj, file, protocol=None, *, fix_imports=True)
  • pickle.load(文件,*,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']

关于Python将对象属性写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55296360/

相关文章:

python - 为什么 **kwargs 不使用 python ConfigObj 进行插值?

python-3.x - PySide2 和 pyinstaller gui 应用程序无法在某些 Windows 计算机上运行

python-3.x - 如何使用 .p12 证书对 rest api 进行身份验证

Python 将列表转换为数据框

java - 读取文件文本的特定部分,然后将它们添加到数组中

python - 使用python将列文本数据转换为特征以用于机器学习

python - 使用 Spark 并行运行不同的分类器/算法

python - 如何显示第一列的数字并统计出现的次数?

c - 使用命令行参数在 C 文件中查找和替换单词

c - 如何在 C 语言中删除文件末尾不需要的字符?