一个Python扩展模块,它封装了谷歌的DeffyMatChina补丁C++实现,用于非常快速的字符串比较。版本1.0.2修复了Mac上的生成问题。

diff_match_patch_python的Python项目详细描述


一个Python扩展模块,它封装了谷歌DIFF匹配补丁的C++实现,用于执行非常快的字符串比较。

google diff match patch是一个用于计算文本文件之间差异的google库(<;http://code.google.com/p/google-diff-match-patch>;)。它们是各种语言的实现。虽然有一个python端口,但它在处理非常大的文档时速度很慢,而且我需要速度。我想使用C++实现,但是我是一个Python的家伙,所以我更喜欢使用Python。

谷歌的库依赖于Qt 4,所以其他一些人使用标准的C++类库改写了它,使它更便于携带。在<;https://github.com/leutloff/diff-match-patch-cpp-stl>;。

此项目是一个Python扩展模块,用于C++ STL端口,因此Python代码 可以很容易地调用本机库。它在python 2和python 3中都可以工作。

示例

第一个:

pip3 install diff_match_patch_python

然后编写(这是python 3):

from diff_match_patch import diff

changes = diff("Hello world.", "Goodbye moon.",
        timelimit=0, checklines=False)

for op, length in changes:
        if op == "-": print ("next", length, "characters are deleted")
        if op == "=": print ("next", length, "characters are in common")
        if op == "+": print ("next", length, "characters are inserted")

该模块还提供了一个名为diff_bytes的方法,用于对字节数组执行diff。

在python 2中,这些方法被命名为diff_unicode(unicode字符串)和diff_str(str字符串)。

^ {tT4}$参数是如果您想确保结果来得很快,则以秒为单位的最大运行时间。根据google文档,diff将在超过时间后停止工作,并返回有效的diff,但它可能不是最好的diff。checklines也是google的一项功能,它可能会加速基于文本(如代码)的区分。

diff方法还接受一个counts_only参数,默认为True。将其设置为False,以使返回值是操作元组和相应字符串的数组,而不是操作和这些字符串的长度。

从源构建

要从这些来源构建,您需要:

  • python开发头文件(debian包python-dev
  • diff匹配修补程序库,可以使用git submodule update --init克隆它。

然后使用:

python setup.py install

或者您可以在构建目录的git存储库中找到预构建的二进制文件。 根据您的系统是否兼容,您的里程可能会有所不同。

对于软件包维护人员

构建一切:

git submodule update && rm -rf build && python setup.py build && python3 setup.py build

以及在不安装的情况下进行测试:

PYTHONPATH=build/lib.linux-x86_64-2.7/ python test.py
PYTHONPATH=build/lib.linux-x86_64-3.4/ python3 test.py

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

推荐PyPI第三方库


热门话题
java如何将jaxb插件扩展与gradlejaxbplugin一起使用   java Hibernate列表<Object[]>到特定对象   java使用多态性显示arraylist的输出   java水平堆叠卡,带有一定偏移量   java错误:找不到符号方法liesInt()   java客户机/服务器文件收发中的多线程流管理   在java中可以基于访问重载方法吗?   包含空元素的java排序数组   swing Java按钮/网格布局   java BottomNavigationView getmaxitemcount   java空指针异常字符串生成器   java Xamarin升级导致“类文件版本错误52.0,应为50.0”错误   java我正在尝试打印它,而不只是对每一行进行println   Tomcat7中的java是否需要复制上下文。将xml转换为conf/Catalina/locahost以使其生效   带有注入服务的java REST端点在何处引发自定义WebServiceException?   在Java中使用GPS数据   java如何将JFreeChart ChartPanel导出到包含添加的CrosshairOverlay的图像对象?   内置Eclipse期间的Java 8堆栈溢出   java在GWT编译的JavaScript中如何表示BigDecimal