我正在解决一个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 库接受的某种内置数据类型,例如 dict
、list
或 tuple
如果您在加载时需要该对象,则必须重新创建它。像这样的事情:
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/