统一差异解析/元数据提取库。
项目描述
一个简单的Python库,用于解析和交互统一差异数据。
安装unidiff
$ pip install unidiff
快速开始
>>> import urllib.request >>> from unidiff import PatchSet >>> diff = urllib.request.urlopen('https://github.com/matiasb/python-unidiff/pull/3.diff') >>> encoding = diff.headers.get_charsets()[0] >>> patch = PatchSet(diff, encoding=encoding) >>> patch <PatchSet: [<PatchedFile: .gitignore>, <PatchedFile: unidiff/patch.py>, <PatchedFile: unidiff/utils.py>]> >>> patch[0] <PatchedFile: .gitignore> >>> patch[0].is_added_file True >>> patch[0].added 6 >>> patch[1] <PatchedFile: unidiff/patch.py> >>> patch[1].added, patch[1].removed (20, 11) >>> len(patch[1]) 6 >>> patch[1][2] <Hunk: @@ 109,14 110,21 @@ def __repr__(self):> >>> patch[2] <PatchedFile: unidiff/utils.py> >>> print(patch[2]) diff --git a/unidiff/utils.py b/unidiff/utils.py index eae63e6..29c896a 100644 --- a/unidiff/utils.py +++ b/unidiff/utils.py @@ -37,4 +37,3 @@ # - deleted line # \ No newline case (ignore) RE_HUNK_BODY_LINE = re.compile(r'^([- \+\\])') -
通过将文件对象作为参数传递给PatchSet
或使用PatchSet.from_filename
类方法从文件中读取差异来加载统一差异数据。
PatchSet
是给定补丁更新的文件的列表。对于每个PatchedFile
,您可以获取统计信息(如果是新文件、已删除或已修改的文件;源/目标行等),此外还可以访问每个块(也像列表一样)及其相关信息。
在任何时候,您都可以获取当前对象的字符串表示形式,这将返回该对象的一致差异数据。
作为一个快速示例,请查看bin/unidiff文件。
此外,一旦安装,unidiff提供了一个命令行程序,可以显示差异数据(文件或stdin)的信息。例如
$ git diff | unidiff Summary ------- README.md: +6 additions, -0 deletions 1 modified file(s), 0 added file(s), 0 removed file(s) Total: 6 addition(s), 0 deletion(s)
加载本地差异文件
要从本地文件实例化PatchSet
,您可以使用
>>> from unidiff import PatchSet >>> patch = PatchSet.from_filename('tests/samples/bzr.diff', encoding='utf-8') >>> patch <PatchSet: [<PatchedFile: added_file>, <PatchedFile: modified_file>, <PatchedFile: removed_file>]>
注意(可选的)encoding
参数。如果没有指定,则期望unicode输入。或者,作为替代方案
>>> import codecs >>> from unidiff import PatchSet >>> with codecs.open('tests/samples/bzr.diff', 'r', encoding='utf-8') as diff: ... patch = PatchSet(diff) ... >>> patch <PatchSet: [<PatchedFile: added_file>, <PatchedFile: modified_file>, <PatchedFile: removed_file>]>
最后,您还可以传递任何可迭代对象(如果需要,则传递编码)来实例化PatchSet
>>> from unidiff import PatchSet >>> with open('tests/samples/bzr.diff', 'r') as diff: ... data = diff.readlines() ... >>> patch = PatchSet(data) >>> patch <PatchSet: [<PatchedFile: added_file>, <PatchedFile: modified_file>, <PatchedFile: removed_file>]>
如果您不需要能够重新构建原始统一差异输入,可以传递metadata_only=True
(默认为False
),这将有助于提高解析效率
>>> from unidiff import PatchSet >>> patch = PatchSet.from_filename('tests/samples/bzr.diff', encoding='utf-8', metadata_only=True)
参考
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
unidiff-0.7.5.tar.gz (20.9 kB 查看哈希值)
构建分布
unidiff-0.7.5-py2.py3-none-any.whl (14.4 kB 查看哈希值)
关闭
unidiff-0.7.5.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2e5f0162052248946b9f0970a40e9e124236bf86c82b70821143a6fc1dea2574 |
|
MD5 | 34ffc3f9fdc4763d4d98840381556cde |
|
BLAKE2b-256 | a34881be0ac96e423a877754153699731ef439fd7b80b4c8b5425c94ed079ebd |
关闭
unidiff-0.7.5-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c93bf2265cc1ba2a520e415ab05da587370bc2a3ae9e0414329f54f0c2fc09e8 |
|
MD5 | 84d8a496f5ea3c957c38f1d82934945f |
|
BLAKE2b-256 | 8a5457c411a6e8f7bd7848c8b66e4dcaffa586bf4c02e63f2280db0327a4e6eb |