数据手册。打开、处理和保存基于表的数据。
dataplaybook的Python项目详细描述
数据手册
:book:playbooks用于数据。打开、处理和保存基于表的数据。
自动化基于表的数据的重复任务。包括各种输入输出任务。可通过自定义模块扩展。
安装:pip install dataplaybook
使用:dataplaybook playbook.yaml
剧本结构
playbook.yaml文件允许您加载其他模块(包含任务),并指定要按顺序执行的任务及其所有参数。
要执行的任务通常遵循读、处理、写的结构。
示例yaml:(请注意yaml区分大小写)
modules:[list,of,modules]tasks:-task_name:# See a list of tasks belowtask_setting_1:1tables:# The INPUT. One of more tables used by this tasktarget:# The OUTPUT. Target table name of this functiondebug:True/False# Print extra debug message, default: False
模板化
jinja2和jmespath表达式可用于为后续任务创建参数。jinja2简单地使用"{{var[res1]}"
括号语法,jmespath表达式应该以单词jmespath开头,后跟空格。
vars
和template
任务都会得到类似的结果:(这将在键列上搜索与字符串"2"匹配的表,并返回值列中的值)
-vars:res1:jmespath test[?key=='2'].value | [0]# is equal to-template:jmespath:"test[?key=='2'].value|[0]"target:res1# ... then use it with `{{ var.res1 }}`
jmespath任务模板
任务的优点是可以创建新变量或表
如果您有定期使用的查找,可以执行以下操作:
-build_lookup_var:key:keycolumns:[value]target:lookup1# and then use it as follows to get a similar results to the previous example-vars:res1:"{{var['lookup1']['2'].value}}"
在使用jinja搜索表时,使用selectattr
的类似一行代码似乎要复杂得多:
-vars:res1:"{{test|selectattr('key','equalto','2')|map(attribute='value')|first}}"
任务
任务被实现为简单的python函数,这些模块可以在dataplaybook/tasks文件夹中找到。
默认任务dataplaybook.tasks
(默认加载)
- 生成查找
- 生成查找变量
- 联合收割机
- 下降
- 延长
- 过滤器
- 模糊匹配(
pip install fuzzywuzzy
) - 打印
- 更换
- 独特
- vlookup
模板(默认加载)
- 模板-可用于
- vars-使用
其他模块
如果需要,可以加载这些模块
- ietf
dataplaybook.tasks.ietf
-ietf/rfc/draft相关任务 - gis
dataplaybook.tasks.gis
-qgis数据的任务 - fnb
dataplaybook.tasks.fnb
IO任务
excel文件dataplaybook.tasks.io_xlsx
(默认加载)
- 阅读excel
- 编写excel
杂项I/Odataplaybook.tasks.i o_misc
(默认加载)
- 阅读csv
- 阅读标签
- 阅读"文本"regex
- wget
- 写入csv
mongo dbdataplaybook.tasks.io\u mongo
需要pymongo
- 阅读"mongo"
- 写"mongo"
- 列到列表
- 列出"u到u"列
模块io_pdf
在您的路径上需要pdftotext可执行文件
- 阅读PDF页面
- 阅读PDF文件
模块io_xml
- 读取XML
特殊的yaml函数
- < L> >代码>!re<;expression>;正则表达式< L> >代码>!es<;搜索字符串>;使用voidtools中的所有内容搜索文件
安装开发版本
- 复制回购协议
pip安装<;路径>;-e
数据剧本来源
创建数据剧本是为了替换我周围的各种代码片段。它们都是为了确保某些低级任务的可重复性而创建的,并且通常遵循类似的结构来加载、处理和保存某些内容。(将网络数据处理为地理信息系统工具、网络审计和路由器和网管输出报告、提取ietf标准以完成soc、将我的银行对账单读入excel预算工具等)
对于其中许多任务,我都有特定的处理代码(tasks_x.py
,在剧本中加载了模块:[tasks_x]
),但在几乎所有情况下,输入和输出任务(以及配置这些名称等)都是常见的。模块化任务的想法最初来自家庭助理,在那里我开始学习python和"自定义组件"的想法来添加您自己的集成,尽管有人可能会说这与ansible playbooks也有相似之处。
在许多情况下,我有一个'松散'耦合到实际的文件名,使用一切搜索(!es search_pattern
在行动手册中)将搜索模式解析为用于输入的正确文件。
它和Ansible Playbooks有一些共同之处,特别是在我被介绍到Ansible Playbooks之后,这个名字就被选中了。任务结构已于2019年更新,以匹配Ansible Playbooks 2.0/2.5+格式和允许名称。这种格式也更容易引入循环机制等。
与Ansible Playbooks的比较
数据行动手册旨在创建和修改环境中的变量(类似于库存)。数据剧本以一个空的环境开始(尽管您可以从剧本中的不同来源读取环境)。
尽管可以在ansible中使用register:创建新变量,但数据playbook函数要求通过target:
捕获输出。
数据行动手册任务不同于Ansible的行动
- 它们大多不是等幂的,因为其目的是在我们进行时修改表,
- 它们可以返回包含行的列表,也可以是python迭代器(即表的
yield
rows) - 如果它们不返回任何表格数据(列表),则返回值将添加到环境中的
var
表中 - 每个都有一个严格的volupturous模式,在加载时和运行时进行评估(例如展开模板),以便快速排除故障
你可以说我可以用ansible来实现,但是对于单项目主机文件,在整个剧本中,收集事实:不
和委托给:localhost
就没有那么优雅了。强迫自己去思考可能只会有一半的乐趣。