差异和修补程序表

daff的Python项目详细描述


[![构建状态](https://travis-ci.org/paulfitz/daff.svg?branch=master)(https://travis ci.org/paulfitz/daff)
[![NPM版本](https://badge.fury.io/js/daff.svg)(http://badge.fury.io/js/daff)
[![宝石版](https://badge.fury.io/rb/daff.svg)](http://badge.fury.io/rb/daff)
[![PYPI版本](https://badge.fury.io/py/daff.svg)(http://badge.fury.io/py/daff)
[![php版本](https://badge.fury.io/ph/paulfitz%2fdaf php.svg)(http://badge.fury.io/ph/paulfitz%2fdaf php)
[![鲍尔版本](https://badge.fury.io/bo/daff.svg)](http://badge.fury.io/bo/daff)
![徽章计数](http://img.shields.io/:badges-7/7-33aa33.svg)

==


这是一个用于比较表的库,生成表之间的差异摘要,并将此摘要用作修补程序文件。它是为比较共享一个共同来源的表而优化的,换句话说,它是"同一"表的多个版本。


有关实时演示,请参见:
>;http://paulfitz.github.com/daff/

/javascript
pip install daff python
gem install daff ruby
composer需要edwin de jonge的paulfitz/daff php
install.packages('daff')r wrapper//github.com/paulfitz/daff/releases

或使用库通过chrome扩展查看github上的csv差异:
>;https://github.com/theodi/csvhub


此处指定了"daff"使用的差异格式:
>;http://paulfitz.github.io/daff doc/spec.html

已下载的Coopy工具箱版本(请参见http://share.find.coop)。要比较不同来源的表,
或自动生成的ID,或其他复杂情况,请查看coopy工具箱。


相邻差异。
调用如下:
daff a.csv b.csv
daff[--color][--no color][--output output.csv]a.csv b.csv
daff[--output output.html]a.csv b.csv
daff[--www]a.csv b.csv
daff parent.csv a.csv b.csv
daff--输入格式sqlite a.db b.db
daff补丁[--inplace]a.csv patch.csv
daff merge[--inplace]parent.csv a.csv b.csv
daff trim[--output output.csv]source.csv
daff render[--output output.html]diff.csv
daff copy in.csv.tsv
daff in.csv
daff git
daff version

e将导致修改a.csv。

如果需要更多控制,这里是标志的完整列表:
daff diff[--output output.csv][--context num][--all][--act act]a.csv b.csv
--act act:仅显示某种更改(更新、插入、删除、列)
--all:不修剪未更改的行或列
--所有行:不修剪未更改的行
--所有列:不修剪未更改的列
--颜色:用终端颜色突出显示更改(终端中的默认值)
--上下文数:显示上下文行数(0=无)
--上下文列数:显示上下文列数(0=无)
--如果差异:返回状态为0,如果相等,则为0;如果不同,则为1;如果出现问题,则为2
--id:指定要用作主键的列(对多列键重复此操作)
--忽略:指定要忽略的列complely(可重复)
--索引:包括原始表中的行/列编号
--输入格式[csv tsv ssv psv json sqlite]:设置输入所需的格式
--eol[cr lf lf cr auto]:csv输出行之间的分隔符。
--无颜色:确保终端颜色不使用
--顺序:假定行顺序有意义(csv的默认值)
--输出ut format[csv tsv ssv psv json copy html]:设置输出格式
--填充[dense sparse smart]:设置用于对齐列的填充方法
--表名:比较与sql源一起使用的命名表。如果名称更改,请使用"n1:n2"
--无序:假定行顺序没有意义(默认为json格式)
-w/--忽略空白:忽略前导/尾随空白中的更改
-i/--忽略大小写:忽略大小写中的差异


daff render[--output output.html][--css css.css][--fragment][--plain]diff.csv
--css css.css:生成一个合适的css文件以与html一起使用
--fragment:只生成一个html片段而不是一个页面
--plain:不要使用花哨的utf8字符使箭头更漂亮
--unquote:do n不能引用HTML diff中的HTML字符
--www:send output to a browser
`````

ll daff作为存储库中`*.csv'文件的差异和合并处理程序
。运行"daff git"获取有关手动执行此操作的说明
。您的csv差异和合并将变得更加智能,
因为git将突然了解行和列,而不仅仅是行:

![示例csv diff](http://paulfitz.github.io/daff-doc/images/daff-vs-diff.png)

我们以javascript为例。要在网页上使用"daff",首先要包括"daff.js":
``html
<;script src="daff.js">;
`````
<;script src="daff.js">;
`````
``js
var daff=require('daff');
````

`数据2`:
``JS
VAR数据1=[
[
['country','capital'],
['爱尔兰','都柏林',
['法国','巴黎',
['br/>['西班牙','巴塞罗那']

VAR数据2=[
=[
=[
['country','code','capital',
['爱尔兰','ie','都柏林',
=[
['法国','f法国','fr','巴黎',

VAR数据1=[
['爱尔兰','ie','都柏林','都柏林','都>['的pain'、'es'、'madrid']、
['germany'、'de'、'berlin']
];
````


为了使这些表可供库访问,我们将它们包装在"daff.tableview"中:
``js
var table1=new daff.tableview(data1);
var table2=new daff.tableview(data2);
```



两个表中的行与列之间的对齐方式

``js
var alignment=daff.comparetables(Table1,Table2.align();
```


要从对齐方式中产生差异,我们首先需要一个表
用于输出:
``js
var data_diff=[];
var table_diff=new daff.tableview(data diff);
```

r/>此处的规范:
>;http://paulfitz.github.io/daff doc/spec.html

``js
['!',",","++",",",
["@","国家","代码","首都"],
["+","爱尔兰","爱尔兰","都柏林"],
["+","法国","法国","巴黎"],
["->;","西班牙","西班牙","西班牙","巴塞罗那->;马德里"],
["+++","德国","德国","柏林"]
````

要将其转换为单元格上具有适当类的HTML表,以便可以插入颜色代码,
删除、更新等,可以使用:
``js
var diff2html=new daff.diffender();
diff2html.render(table_diff);
var table_diff_html=diff2html.html();
```

对于三方差异(即,在已知共同祖先
的情况下比较两个表),使用"daff.comparetables3"(将祖先
表作为第一个参数)。

如何将这种差异作为补丁应用:
``js
var patcher=new daff.highlightpatch(table 1,table_diff);
patcher.apply();
//table 1现在应该等于table 2
```

对于其他语言,您应该在[releases]上的包中找到示例代码(https://github.com/p)Br//> Br/>支持语言< BR/> --------BR/> Br/>"DAFF"库是用[ HAXE](http://HAXE.org)编写的,
可以很好地翻译成以下语言:
BR/> *JavaScript
Python
*JavaBR/**BR/>C++BR/**Ruby(使用[非官方HAXE目标](HTTPS://GITHUB/COM/PALFIZZ/HAXE)为'DAFF开发)
BR/>在
[发布](HTTPS://GITHUB.COM/PALFITZ/DAFF/EXPRESS)页上为您做了一些翻译。st按照[haxe语言简介](https://haxe.org/documentation/introduction/language-introduction.html)来学习您关心的
语言。在编写本文时,如果您使用的是osx,则应使用"brew install haxe"安装haxe。然后做一个:

使JS
制作PHPB/>使PyBr/>使JavaBR/>使CsBR/>使CPP
'BR/> BR/>对于每种语言,"DAFF"库期望将接口交给您创建的表,而不是创建它们
本身。这是为了避免从一种格式到另一种格式的复制效率低下。如果
你觉得这很尴尬,你会找到一个可以使用的"simpletable"类。


其他可能性:

*有一个由[edwin de jonge]编写的r的daff包装器(http s://github.com/edwindj),请参见https://github.com/edwindj/daff和http://cran.r-project.org/web/packages/daff
*e是由[james smith]手工编写的ruby端口(http s://github.com/floppy),请参见https://github.com/theodi/coopy ruby

---------


*您可以在http://paulfitz.github.io/daff doc/


---

<;img src="http://data commons.c o op/images/the_zen_of_n.png"a lt="the zen of venn"height="100">;
在全球所有合作组织中,<;a href="https://datacommons.coop">;"datacommons c o op"<;/a>;,"或许是最古怪的",在发展过程中给予了巨大的道德支持。f`daff`.
用你的货币捐赠一个"42.42"的倍数,让他们知道你关心他们:<;a href="https://datacommons.coop/invent/">;https://datacommons.coop/invent/<;


阅读材料
---------

*http://dataprotocols.org/tabular-diff-format/:a specifiat我们使用的diff格式的ion(现在似乎已经消失了;请参见https://paulfitz.github.io/daff-doc/spec.html)。
*http://theodi.org/blog/csvhub-github-diff-for-csv-files:将此库与github一起使用。
*https://github.com/ropensci/unconf/issues/19:wh中的差异数据线程我的daff至少以四种形式出现(看看你是否能发现它们)。
*http://theodi.org/blog/adapting-git-simple-data:将这个库与gitlab一起使用。
*http://okfnlabs.org/blog/2013/08/08/diffing-and-patching-data.html:库的来源摘要。
*http://blog.okfn.org/2013/07/02/git-and-github-for-data/:一篇关于在git/github中存储小数据的文章。
*http://blog.ouseful.info/2013/08/27/diff-or-chop-github-csv-data-files-and-openrefine/:对位-一篇讨论跟踪的更改而不是差异的文章。
*http://blog.byronjsmith.com/makefile-shortcuts.html:关于对数据使用"make"的教程,混合使用daff。"由于git考虑每行的更改,
查看逗号分隔和制表符分隔文件的差异可能会令人讨厌。程序daff解决了这个问题。"daff是在mit许可下发布的。"

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ws-consumer服务地址中的java动态属性   java如何比较整数列表,然后按升序排序?   javascript我正在使用java脚本调用一个函数,但它没有调用代码下面的方法,也没有调用secretitnames()函数   在文本窗格中多次使用Java insertIcon图标   JavaMSAL安卓。AuthenticationActivity完成,但用于身份验证请求的线程池线程仍处于等待状态   if语句中的java多范围比较   java toString()表示输出   java如何在jcstrest测试中生成指令重新排序   java我怎样才能运行它?   web应用程序中使用Hibernate和Spring的java问题   如何将字符串数据写入Java文本文件   如何在java命令提示符下运行已签名的jar文件?   java从我的菜单调用RCP应用程序   java如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?