清理凌乱的数据。
dripper的Python项目详细描述
清理凌乱的数据。
Getting started
考虑清理一些混乱的数据。 这是一个深度嵌套字典,包含许多不必要的嵌套和元组。
some_messy_data={"body":{"article":{"articlesbody":{"articlesmeta":{"articles_meta_3":"Monty Python",}}},},"published":{"datetime":("2014-11-05","23:00:00"),}}
您需要的值是'Monty Python'和'2014-11-05', 应该命名为'title'和'published_date'
现在让黑客从dripper开始。
- 玷污declaration字典
- 通过dripper.dripper_factory 创建滴头对象
- 滴滴基本数据
# Definedeclaration={"title":("body","article","articlesbody","articlesmeta","articles_meta_3"),"published_date":("published","datetime",0)}# Createimportdripperd=dripper.dripper_factory(declaration)# And dripdripped=d(some_messy_data)assertdripped=={"title":"Monty Python","published_date":"2014-11-05",}
Installation
只需使用pip安装
pip install dripper
要求
dripper不需要任何类型的外部库。 支持python的版本有:
- python 2.7版
- Python3.3
- Python3.4
- Python3.5
Basics
上面的例子并不是dripper的所有特性。 创建它是为了处理要清理的各种数据。
as值
fromdripperimportdripper_factorydeclaration={"title":("meta","meta1")})d=dripper_factory(declaration)d({"meta":{"meta1":"Monty Python"}})=={"title":"Monty Python"}
也可以直接指定字符串或整数。 它与一个元素元组相同。
fromdripperimportdripper_factorydeclaration={"title":"meta"})d=dripper_factory(declaration)d({"meta":"Monty Python"})=={"title":"Monty Python"}
作为dict
dripper可以定义嵌套字典。 只需将嵌套字典传递给dripper_factory。
fromdripperimportdripper_factorydeclaration={"article":{"title":["meta","meta1"],}})d=dripper_factory(declaration)d({"meta":{"meta1":"Monty Python",},})=={"article":{"title":"Monty Python",}}
您可以应用'__source_root__'来设置滴水的根路径。
declaration={"article":{"__source_root__":("body","meta"),..."title":"meta1","author":("meta2","meta22"),}})d=dripper_factory(declaration)d({"body":{"meta":{"meta1":"Monty Python","meta2":{"meta22":"John Due"}}}})=={"article":{"title":"Monty Python","author":"John Due",}}
从技术上讲,declaration的最外层字典与内部字典相同。 所以您可以指定'__source_root__'字典。
列表
dripper可以定义字典列表。 您需要申请'__type__': 'list'。
fromdripperimportdripper_factorydeclaration={"articles":{"__type__":"list","__source_root__":"articles",..."title":"meta1","author":["meta2","meta22"],}})d=dripper_factory(declaration)d({"articles":[{"meta1":"Monty Python","meta2":{"meta22":"John Doe"}},{"meta1":"Flying Circus","meta2":{"meta22":"Jane Doe"}},]})=={"articles":[{"title":"Monty Python","author":"John Doe"},{"title":"Flying Circus","author":"Jane Doe"},]}
Advanced
转换
使用dripper.ValueDripper传递转换器函数。
importdripperdeclaration={"title":dripper.ValueDripper(["title"],converter=lambdas:s.lower())}d=dripper.dripper_factory(declaration)d({"title":"TITLE"})=={"title":"title"}
从技术上讲,每个端点(列表)将被dripper.ValueDripper的实例替换。
默认值
指定default关键字参数以更改默认值。 None将作为默认值应用。
importdripperdeclaration={"title":dripper.ValueDripper(["title"],default="default")}d=dripper.dripper_factory(declaration)d({})=={"title":"default"}
从技术上讲,每个端点(列表)将被dripper.ValueDripper的实例替换。
组合
通过组合dripper.ValueDripper,将组合该键的结果值。
importdripperdeclaration={"fullname":(dripper.ValueDripper(["firstname"])+dripper.ValueDripper(["lastname"]))}d=dripper.dripper_factory(declaration)d({"firstname":"Hrioki","lastname":"Kiyohara"})=={"fullname":"HriokiKiyohara"}
CHANGES
1.2
- 避免deepcopy以提高速度
1.1
- None是ValueDripper
- 的默认值。
- 在此更改之前ValueDripper不带default关键字参数 将提高DrippingError
- 为了这个行为,DictDripper将返回空的dict 当内部值dripper无法挖掘出值时
- 感谢@bungoume推荐这种行为
1.0
- 官方支持的Python3.5
0.3.1
- valuedripper现在接受default参数。
0.3
- 固定为直接接受字符串或整数作为源根。
0.2
- 改进了错误处理。
- 添加了mixdripper。
0.1
- 初始版本