国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

pythondifflib詳解

2019-11-14 17:44:12
字體:
來源:轉載
供稿:網友

difflib -幫助進行差異化比較

這個模塊提供的類和方法用來進行差異化比較,它能夠生成文本或者html格式的差異化比較結果,如果需要比較目錄的不同,可以使用filecmp模塊。

class difflib.SequenceMatcher

這是可以用來比較任何類型片段的類,只要比較的片段是可hash的,都可以用來比較,使用非常靈活。他源于1980,s的“完形匹配算法”,并且進行了一系列的優化和改進。

通過對算法的復雜度比較,它由于原始的完形匹配算法,在最壞情況下有n的平方次運算,在最好情況下,具有線性的效率。

它具有自動垃圾啟發式,可以將重復超過片段1%或者重復200次的字符作為垃圾來處理。可以通過將autojunk設置為false關閉該功能。

autojunk 參數新增于2.7.1版本。

class difflib.Differ

這個類用來比較文本里的行,并且產生可閱讀的差異化結果。

它用以下符號來表示不同

Code

Meaning

'- '

僅在片段1中存在

'+ '

僅在片段2中存在

' '

片段1和2中都存在

'? '

存在疑問的

標識為?需要你通過人工的方式仔細比較他們的不同,他們產生的原因是源于混亂的制表符

class difflib.HtmlDiff

這個類用來創建一個html表格(或者包含html表格的文件)用來展示文件差異。他既可以進行全文本展示,也可以只展示上下文不同。

這個類的構造函數如下:

__init__(tabsize=8, wrapcolumn=None, linejunk=None, charjunk=IS_CHARACTER_JUNK)

tabsize表示制表符代表的空格個數,默認為8

wrapcolumn,可選參數,用來設置多少個字符時自動換行,默認None,None時表示不自動換行

linejunkcharjunk,可選參數,在ndiff()中使用,

這個類的公共方法:

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

用來生成一個包含表格的html文件,其內容是用來展示差異。

fromlinestolines,用于比較的內容,格式為字符串組成的列表

fromdesctodesc,可選參數,對應的fromlines,tolines的差異化文件的標題,默認為空字符串

contextnumlines,可選參數,context True時,只顯示差異的上下文,為false,顯示全文,numlines默認為5,當contextTrue時,控制展示上下文的行數,當contextfalse,控制不同差異的高亮之間移動時“next”的開始位置(如果設置為0,當移動懂頂端時,超鏈接會丟失引用地址)

make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

這個方法和make_file用法一樣,唯一的區別在于它只生成了一個html表格字符串

python安裝包的Tools/scripts/diff.py是關于他們使用的一個很好的例子,它可以用命令行來運行。

新增于python2.4

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

用來比較a,b,a,b都是字符串列表。返回一個格式化文本的差異。

他是一個用來展示少量差異的好方法,這種變化,用前/后的樣式進行展示,n默認為3,用來控制展示發現的差異數

默認情況下,差異控制行(*** or ---)用來把a,b的差異區隔開來,便于程序讀寫處理,如果不需要這樣做的話,可以設置lineterm為"",這樣,就會卸載一行里

如果格式化差異文本需要標題和修改時間信息,通過fromfile, tofile, fromfiledate, 和 tofiledate進行控制,如果不設置,默認為空

>>> s1 = ['bacon/n', 'eggs/n', 'ham/n', 'guido/n']>>> s2 = ['python/n', 'eggy/n', 'hamster/n', 'guido/n']>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):...     sys.stdout.write(line)  *** before.py--- after.py****************** 1,4 ****! bacon! eggs! ham  guido--- 1,4 ----! python! eggy! hamster  



guido difflib.get_close_matches(Word, possibilities[, n][, cutoff])
 返回一個最相似匹配的列表word,用來進行匹配的片段(典型的應用是字符串)
possibilities,用來匹配word的片段
n,默認為3,返回的最多結果數,必須大于0
cutoff,默認為0.6,匹配的相似因數,他是一個介于0,1的浮點數
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])['apple', 'ape']>>> import keyword>>> get_close_matches('wheel', keyword.kwlist)['while']>>> get_close_matches('apple', keyword.kwlist)[]>>> get_close_matches('accept', keyword.kwlist)['except']

difflib.
ndiff(a, b[, linejunk][, charjunk])

比較a和b,返回差異

linejunk和charjunk都是用來匹配的方法

linejunk:接收一個字符串的方法,如果這個字符串被認定為垃圾,則返回true,否則為false,默認為None,他調用了IS_LINE_JUNK()這個方法,這個方法存在bug,他不能過濾掉’#’周圍的不可見字符,2.3以后,對這個方法進行了動態分析,表現會比以前好些

charjunk:接受一個字符的方法,如果這個字符被認定為垃圾,則返回true,否則為false,它調用了IS_CHARACTER_JUNK(), 他會自動過濾掉空白字符(所以,不要用空白字符或者制表符作為分隔符)

Tools/scripts/ndiff.py 是執行這一方法的實例:

>>> diff = ndiff('one/ntwo/nthree/n'.splitlines(1),...              'ore/ntree/nemu/n'.splitlines(1))>>> 

difflib.
restore(sequence, which)

返回1或2的差異對Differ.compare() 或者 ndiff()的結果進行處理,根據參數which,返回片段1或者片段2的差異化結果實例:

>>> diff = ndiff('one/ntwo/nthree/n'.splitlines(1),...              'ore/ntree/nemu/n'.splitlines(1))>>> diff = list(diff) # materialize the generated delta into a list>>> print ''.join(restore(diff, 1)),onetwothree>>> print ''.join(restore(diff, 2)),oretreeemu

difflib.unified_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

用來比較a,b,a,b都是字符串列表。返回一個統一的格式化文本的差異。

使用方式和difflib.context_diff一樣,只是返回的內容展示格式有差異

>>> s1 = ['bacon/n', 'eggs/n', 'ham/n', 'guido/n']>>> s2 = ['python/n', 'eggy/n', 'hamster/n', 'guido/n']>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):...     sys.stdout.write(line)   --- before.py+++ after.py@@ -1,4 +1,4 @@-bacon-eggs-ham+python+eggy+hamster guido

 

 

difflib.IS_LINE_JUNK(line)如果是需要忽略的行,則返回為true,如果這個行內全為空格或者只有’#’,則將這行忽略掉

difflib.IS_CHARACTER_JUNK(ch)如果是需要忽略的字符,則返回為true,如果這個字符為空格,則將這行忽略掉


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪洞县| 武平县| 肇东市| 巴塘县| 天峨县| 锦屏县| 峨眉山市| 巴东县| 湖北省| 桂东县| 化德县| 万安县| 五指山市| 天全县| 锦屏县| 肥西县| 丰镇市| 靖边县| 德化县| 加查县| 茌平县| 水城县| 靖宇县| 德江县| 专栏| 莱州市| 平山县| 扶沟县| 崇阳县| 垫江县| 贡觉县| 历史| 永宁县| 松滋市| 宝坻区| 麦盖提县| 广丰县| 永善县| 宣威市| 抚松县| 西乌珠穆沁旗|