我想在Python中定义一个数据结构,我可以使用它轻松编写加载程序和转储程序(与各种序列化格式之间)。它应该提供:
为了说明这个问题,请考虑以下数据:
data = {
'location_a': [{
'name': 'Library A',
'city: 'London',
'books': [
{'title': 'foo', 'date': '2010-04', pages: 400},
}]
]
}
这是限制较少的解决方案,因为没有类型或内容验证。
另一种解决方案是定义这样的类:
class Book(DataContainer):
_fields_ = [('title', str), ('date', str), ('pages', int)]
class Library(DataContainer):
_fields_ = [('name', str), ('city', str), ('books', ListOf(Book))]
class Place(DataContainer):
_fields_ = [{('location', str): ListOf(Library)}]
b = Book(title='foo', date='2010-04', 'pages':400)
l = Library()
l.name = 'Library A'
l.city = 'London'
l.books.append(b)
p = Place(location='location_a')
p.append(l)
data = Data()
data.append(p)
print data.to_xml()
data['location_a'][0].books.append(Book(title='bar'))
dictionary = data.to_dict()
这当然是一个非常丑陋的例子,但我正在寻找一个干净的模块化解决方案,我可以轻松地创建代表,加载器甚至验证器:
Book.title.add_constraint(Match(r'[a-z0-9_]+'))
是否有任何常见模式或已知模块提供此类功能?
例如我尝试过Pandas,但它更专注于数据分析,并且不支持空字段。 '浮动'只允许'NaN'。 Voluptuous是一个很好的验证模块,但它必须用于更完整的解决方案。
有什么想法吗?