用python从文件中写入和读取对象

用python从文件中写入和读取对象,python,Python,有人知道如何将完整的类实例直接写入文件,而不使用read()以字符串行方式写入对象吗但它创建的文本文件不是可读格式。如果有其他方式,请告诉。然后以文件对象方式读取所有这些对象,并打印出来。可读格式的问题是,python需要知道什么是可读格式。我的意思是需要知道如何序列化对象。 您可以尝试json,它将自动转换为文本并返回公共POD数据。即使是嵌套的,您也可以拥有一个包含嵌套列表和嵌套dict的复杂字典,只要其中有pod数据,它就可以很好地序列化。 这意味着您可能需要在类上使用一个序列化/反序列化

有人知道如何将完整的类实例直接写入文件,而不使用read()以字符串行方式写入对象吗但它创建的文本文件不是可读格式。如果有其他方式,请告诉。然后以文件对象方式读取所有这些对象,并打印出来。

可读格式的问题是,python需要知道什么是可读格式。我的意思是需要知道如何序列化对象。 您可以尝试json,它将自动转换为文本并返回公共POD数据。即使是嵌套的,您也可以拥有一个包含嵌套列表和嵌套dict的复杂字典,只要其中有pod数据,它就可以很好地序列化。 这意味着您可能需要在类上使用一个序列化/反序列化方法,该方法将抛出一个pod数据块,并使用相同的数据块重新初始化该类

我开发了一个库来实现这一点,您可能有兴趣看看,它利用了python描述符。
可读格式的问题在于,python需要知道什么是可读格式。我的意思是需要知道如何序列化对象。 您可以尝试json,它将自动转换为文本并返回公共POD数据。即使是嵌套的,您也可以拥有一个包含嵌套列表和嵌套dict的复杂字典,只要其中有pod数据,它就可以很好地序列化。 这意味着您可能需要在类上使用一个序列化/反序列化方法,该方法将抛出一个pod数据块,并使用相同的数据块重新初始化该类

我开发了一个库来实现这一点,您可能有兴趣看看,它利用了python描述符。

pickle
被提到是为了使Python的文本输出可读。 如果要以自己的格式打印,定义自己的方法
obj.output()
将不会那么难: 可以使用dir(object)循环对象的属性和方法,并将它们写入文本文件的单独行中

def output(self):
    with open(self.__name__ + "output.txt","w") as f:
        f.write(self.att.__name__ +" "+ self.att + "/n") for att in dir(obj) if not att.startswith('__')
如果您也不需要这些方法,那么可以检查循环时
callable(obj.att)
是否为false


请参阅进一步的详细信息:

pickle
是为了让Python能够读取文本输出而提出来的。 如果要以自己的格式打印,定义自己的方法
obj.output()
将不会那么难: 可以使用dir(object)循环对象的属性和方法,并将它们写入文本文件的单独行中

def output(self):
    with open(self.__name__ + "output.txt","w") as f:
        f.write(self.att.__name__ +" "+ self.att + "/n") for att in dir(obj) if not att.startswith('__')
如果您也不需要这些方法,那么可以检查循环时
callable(obj.att)
是否为false


请参阅更多详细信息:

pickle
是将实例转储到文件中的最佳方法。如果您想要一种人类可读的方式,那就太倒霉了。使用pickle指定protocol=0将强制使用文本格式。
pickle
我认为是将实例转储到文件中的最佳方式。如果你想要一种人类可读的方式,你运气不好。使用pickle指定protocol=0将强制使用文本格式。确定文件应为人类可读的格式,但不适用于管理。确定在文件中放入多个实例后,如何读取它们。我的意思是如何读取文件中的数据,然后将数据存储在实例中,然后使用json打印,我想用泡菜,你会把你放进去的东西拿出来。(我很久没有用泡菜了,所以不要引用我的话)。在json中,如果您有一个dict列表,其中每个dict表示一个类,那么您将以相同的顺序得到相同的dict列表,并且具有相同的dict数量。检查这里的保存和加载方法抱歉,兄弟,但我对jason不是很熟悉。好的,文件应该是人类可读的格式,不是manadatory。好的,在文件中放入许多实例之后,我如何读取它们。我的意思是,我如何读取文件中的数据,然后将数据存储在一个实例中,然后用json打印出来,我想用泡菜,你会把你放进去的东西拿出来。(我很久没有用泡菜了,所以不要引用我的话)。在json中,如果您有一个dict列表,其中每个dict表示一个类,那么您将以相同的顺序得到相同的dict列表,并且具有相同的dict数量。检查这里的保存和加载方法抱歉兄弟,但我对jason不太熟悉。