欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python標(biāo)準(zhǔn)庫(kù)Difflib有坑?——兩個(gè)方法快速提升數(shù)據(jù)對(duì)比效率

一 前言

發(fā)展壯大離不開(kāi)廣大客戶長(zhǎng)期以來(lái)的信賴與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都柔性防護(hù)網(wǎng)等,在成都網(wǎng)站建設(shè)營(yíng)銷型網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開(kāi)發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

最近在開(kāi)發(fā)的數(shù)據(jù)核對(duì)方案中用到了Python標(biāo)準(zhǔn)庫(kù)Difflib,本來(lái)它工作的挺符合預(yù)期,可當(dāng)它遇到那個(gè)文件,仿佛遇到了克星,那文件才100行*77列的數(shù)據(jù),經(jīng)它對(duì)比,居然耗時(shí)61s。這是無(wú)法接受的,因?yàn)楹罄m(xù)線上流量抽取比對(duì),絕非這點(diǎn)量級(jí)。該怎么破?

?

二 重現(xiàn)現(xiàn)象

以下是使用Difflib比對(duì)那個(gè)文件,數(shù)據(jù)量是100行*77列,耗時(shí)61s,如下:

Python標(biāo)準(zhǔn)庫(kù)Difflib有坑? —— 兩個(gè)方法快速提升數(shù)據(jù)對(duì)比效率

好吧,那就降低數(shù)據(jù)量到5行*77列,看看效果,耗時(shí)只有0.05s,如下:

Python標(biāo)準(zhǔn)庫(kù)Difflib有坑? —— 兩個(gè)方法快速提升數(shù)據(jù)對(duì)比效率

從耗時(shí)結(jié)果上,不難發(fā)現(xiàn),Difflib在這個(gè)文件的比對(duì)性能較差,而且耗時(shí)不隨數(shù)據(jù)量線性增加,這是最恐怖的地方,如果繼續(xù)增大數(shù)據(jù)量,耗時(shí)將會(huì)變得無(wú)法忍受。

?

三 優(yōu)化思路

Difflib作為標(biāo)準(zhǔn)庫(kù),它的功能只是比對(duì)數(shù)據(jù),然后生成各樣結(jié)果格式。當(dāng)遇到耗時(shí)嚴(yán)重這類問(wèn)題,首先應(yīng)該從自己的數(shù)據(jù)上入手,我的優(yōu)化思路有兩個(gè):

第一,??過(guò)濾掉相同的行數(shù)據(jù),降低比對(duì)數(shù)據(jù)量;

第二,??數(shù)據(jù)分片;

針對(duì)第一個(gè)思路,將文件以行分割存放到列表,然后將列表相同位置的相同數(shù)據(jù)刪除掉,只剩下不同的行數(shù)據(jù),這樣做的好處很明顯,一方面可以降低比對(duì)的數(shù)據(jù)量,提升效率,另外,輸出的結(jié)果也更干凈,不會(huì)再輸出無(wú)必要的相同行數(shù)據(jù);

針對(duì)第二個(gè)思路,將待比對(duì)的數(shù)據(jù)劃分成一個(gè)個(gè)相對(duì)較小的數(shù)據(jù)塊,實(shí)現(xiàn)快速比對(duì),這個(gè)方法的可行性,可以從上述數(shù)據(jù)量耗時(shí)比對(duì)得出。

?

四 具體實(shí)現(xiàn)

過(guò)濾相同行優(yōu)化策略,實(shí)現(xiàn)代碼如下:

#?過(guò)濾相同行
source_length?=?len(source)??#?source為原始數(shù)據(jù)按行分割的列表
target_length?=?len(target)??#?target為目標(biāo)數(shù)據(jù)按行分割的列表
min_length?=?source_length?if?source_length?<?target_length?else?target_length?
pos_list?=?[]??#?標(biāo)記相同行的行號(hào),保留列頭
for?index?in?range(1,?min_length):
????#?注意保序
????if?operator.eq(source[index],?target[index]):
????????pos_list.append(index)
#?刪除相同行數(shù)據(jù),?注意索引漂移
source?=?[source[index]?for?index?in?range(source_length)?if?index?not?in?pos_list]
target?=?[target[index]?for?index?in?range(target_length)?if?index?not?in?pos_list]

數(shù)據(jù)分片優(yōu)化策略,實(shí)現(xiàn)代碼如下:

#?分片
max_length?=?source_length?if?source_length?>?target_length?else?target_length?#?用于分片
#?分片,注意保證不能漏行
start_pos?=?0
step?=?10??#?分片大小,即單次比對(duì)行數(shù),默認(rèn)10行
end_pos?=?start_pos?+?step
diff?=?difflib.HtmlDiff()??#?創(chuàng)建htmldiff實(shí)例對(duì)象
while?end_pos?<?max_length?+?step:
????detail_info?=?diff.make_file(source[start_pos:?end_pos],?target[start_pos:?end_pos])
????#?處理邏輯

?

五 優(yōu)化結(jié)果

在僅使用數(shù)據(jù)分片的優(yōu)化策略的情況下,比對(duì)那個(gè)100行*77列的文件,結(jié)果顯示比對(duì)耗時(shí)僅1.8s。而正如上文所述,優(yōu)化前比對(duì)該文件的耗時(shí)為61s,更重要的是,因?yàn)閿?shù)據(jù)分片,每片比對(duì)耗時(shí)基本穩(wěn)定,即使數(shù)據(jù)量繼續(xù)增大,耗時(shí)也只是線性增加,而不再是類似指數(shù)型增加。另外,如果疊加過(guò)濾數(shù)據(jù)的第一種策略,相信隨著數(shù)據(jù)量的下降,耗時(shí)數(shù)據(jù)會(huì)有更好的表現(xiàn)。但為了更直觀的比對(duì)相同數(shù)據(jù)量下優(yōu)化前后的效果,所以,在此只是使用數(shù)據(jù)分片的策略。

優(yōu)化后耗時(shí)結(jié)果如下:

Python標(biāo)準(zhǔn)庫(kù)Difflib有坑? —— 兩個(gè)方法快速提升數(shù)據(jù)對(duì)比效率

?

六 其他

本文針對(duì)Python標(biāo)準(zhǔn)庫(kù)Difflib比對(duì)文件時(shí)遇到的耗時(shí)嚴(yán)重問(wèn)題,提出了兩種優(yōu)化策略,并經(jīng)測(cè)試驗(yàn)證有效,即僅在數(shù)據(jù)分片策略下,同樣文件的比對(duì)耗時(shí)從原先的61s降到1.8s,且耗時(shí)只是線性增加。如果有更好的方法,歡迎留言、交流。

關(guān)于python學(xué)習(xí)、分享、交流,筆者開(kāi)通了微信公眾號(hào)【小蟒社區(qū)】,感興趣的朋友可以關(guān)注下,歡迎加入,建立屬于我們自己的小圈子,一起學(xué)python。

分享名稱:Python標(biāo)準(zhǔn)庫(kù)Difflib有坑?——兩個(gè)方法快速提升數(shù)據(jù)對(duì)比效率
本文來(lái)源:http://aaarwkj.com/article44/igidhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站排名、移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站營(yíng)銷、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
有码精品视频在线观看| 天堂av新版在线观看| 午夜视频在线观看免费高清国产| 日韩欧美麻豆不卡一区二区| 国产亚洲一区二区自拍视频| 91九色中文视频在线观看| 91黄色国产在线播放| 欧美日韩国产一区二区的| 一区二区三区熟妇人妻视频 | 香蕉视频在线观看亚洲精品| 日韩美女后入式在线视频| 日本人妻系列在线播放| 日本一区二区三级在线观看| 国产亚洲欧美日韩看国产| 国产精品呻吟久久人妻| 视频二区国产欧美日韩| 日韩精品一区二区三区欲色av| 国产精品传媒成人免费| 理论三级麻豆国产在线| 亚洲第一女人天堂av| 婷婷国产综合一区二区三区| 日韩在线不卡播放视频| 婷婷中文字幕在线不卡视频| 国产一区二区主播不卡| 天天操夜夜骑日日干| 国家成人午夜在线观看| 91成人国产综合久久精品| 午夜精品三级一区二区三区| 欧美日韩一区二区三区在线| 懂色av中文一区二区| 91久久亚洲综合精品成人| 内地精品露脸自拍视频| 国产欧美色日韩综合在线| 日韩精品在线观看天堂| 求个手机免费在线观看av网址| 国产免费成人午夜免费视频| 午夜日韩综合激情视频在线观看| 美女口爆吞精一区二区| 精品视频中文字幕天码| 国产男女免费完整视频| 亚洲精品不卡在线观看|