2015-07-08 5 views
0

Я хотел бы создать файл «метаданных» для нескольких объектов Python, которые я создал, и задавался вопросом, был ли элегантный способ записать подмножество этих атрибутов в файл .txt. В идеале, файл .txt имеет следующее форматирование:Записать атрибуты объекта Python в txt файл

object.Name = thisistheobjectname object.Value = thisistheobjectvalue etc... 
+1

Почему бы просто не использовать маринад для сериализации объекта в файл? – bedwyr

+1

В настоящее время отраслевым стандартом является JSON, вам нужно что-то читаемое человеком. – edgars

+0

Отлично, спасибо. Могу ли я рассолить только подмножество атрибутов объекта? – Emily

ответ

1

Если ваша цель состоит в том, чтобы повторно использовать этот объект в дальнейшем, то не изобретать велосипед и использовать pickle. Но если ваша цель состоит в том, чтобы просто получить объекты переменные в приятном глазе текстового файла, то вы можете использовать __dict__ объект

Вы можете эфиру хранить его в JSON или преобразовать его в какой-либо работе для вас:

Например:

import json 

class Foo(object): 
    def __init__(self, name, value): 
    self.name = name 
    self.value = value 

myfoo = Foo('abc', 'xyz') 
with open('foo.txt', 'w') as f: 
    f.write(' '.join(["myfoo.%s = %s" % (k,v) for k,v in myfoo.__dict__.iteritems()])) 

будет приводить к чему-то вроде:

myfoo.name = abc myfoo.value = xyz 
+0

Спасибо, это отлично поработало для меня! – Emily

1

Если вы ищете SOMET hing simple, вы можете использовать это для своего примера выше.

 
import sys 
class Foo(object): 
    bar = 'hello' 
    baz = 'world' 

f = Foo() 
print "\n".join(("`%s.Name=%s %s.Value=%s`" % (f.__class__.__name__, name, f.__class__.__name__, getattr(f, name)) for name in dir(f) if not name.startswith("__"))) 

даст

 
`Foo.Name=bar Foo.Value=hello` 
`Foo.Name=baz Foo.Value=world` 

Для более сложной сериализации вы лучше использовать рассол

Смежные вопросы