成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計劃----difflib模塊

Shonim / 3689人閱讀

摘要:模塊為的標準庫模塊,無需安裝。并且支持輸出可讀性比較強的文檔,與下的命令相似。模塊打開文件只能寫入類型不管字符串是什么編碼方式。

difflib模塊
difflib為python的標準庫模塊,無需安裝。用來對比文本之間的差異。并且支持輸出可讀性比較強的HTML文檔,與LInux下的diff 命令相似。在版本控制方面非常有用。
codecs模塊
open打開文件只能寫入str類型,不管字符串是什么編碼方式。
但是有時候我們爬蟲或者其他方式得到一些數(shù)據(jù)寫入文件時會有編碼不統(tǒng)一的問題,所以就一般都統(tǒng)一轉(zhuǎn)換為unicode。此時的open打開文件會報錯。
寫入時,如果參數(shù) 是unicode,則使用open()時指定的編碼進行編碼后寫入;如果是str,則先根據(jù)源代碼文件聲明的字符編碼,解碼成unicode后再進行前述 操作。相對內(nèi)置的open()來說,這個方法比較不容易在編碼上出現(xiàn)問題。
difflib對比
import  difflib
import codecs

# ["", "1 line", "2 line"]
text1 = """  
    1. Beautiful is better than ugly.
    2. Explicit is better than implicit.
    3. Simple is better than complex.
    4. Complex is better than complicated.
""".splitlines(keepends=True)


text2 = """  
    1. Beautifu  is better than ugly.
    2. Explicit is better than implicit.
    3. Simple is better than complex.
    4. Complex is better than complicated.
""".splitlines(keepends=True)



# 1. 以字符串方式展示兩個文本的不同, 效果如下:
d = difflib.Differ()
result = list(d.compare(text1, text2))
result = " ".join(result)
print(result)
"""
 -     1. Beautiful is better than ugly.
 ?                ^
 +     1. Beautifu  is better than ugly.
 ?                ^
       2. Explicit is better than implicit.
       3. Simple is better than complex.
       4. Complex is better than complicated.
"""


# 2. 以html方式展示兩個文本的不同, 瀏覽器打開:
d = difflib.HtmlDiff()
with codecs.open("diff.html", "w","utf-8") as f:
    f.write(d.make_file(text1, text2))


difflib示例
import  difflib
import codecs    
file1="D:python_needdata.txt"
file2="D:python_needcp.txt"


with open(file1)  as f1, open(file2) as f2:
    text1 = f1.readlines()
    text2 = f2.readlines()

d = difflib.HtmlDiff()
with codecs.open("passwd.html", "w","utf-8") as f:
    f.write(d.make_file(text1, text2))


封裝difflib模塊

使調(diào)用"mydiff 文件1 文件2"命令
生成一個html文件,網(wǎng)頁讀取兩者不同之處

#!/home/kiosk/anaconda2/envs/mysql3/bin/python3

#解釋器如上
"""如果要直接調(diào)用mydiff,需要添加文件到/usr/local/bin,
封裝difflib模塊,文件命名為mydiff
Terminal命令:sudo cp mydiff /usr/local/bin"""
import difflib
import os
import sys
"""mydiff /etc/passwd /tmp/passwd >>differ.html"""


if len(sys.argv) == 3:
    # 命令行跟隨的參數(shù)
    file1 = sys.argv[1]
    file2 = sys.argv[2]
    with open(file1) as f1 ,open(file2) as f2:
        text1 = f1.readlines()
        text2 = f2.readlines()
    d = difflib.HtmlDiff()
    with open("differ.html", "w") as f:
        f.write(d.make_file(text1, text2))
else:
    print("""
    Usage : %s 文件1 文件2 - 返回一個html頁面
    """ %(os.path.basename(sys.argv[0])))


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/42412.html

相關(guān)文章

  • python大佬養(yǎng)成計劃----Flask藍圖

    摘要:使用藍圖的概念來制作應用程序組件和支持應用程序內(nèi)部或跨應用程序的通用模式。藍圖可以大大簡化大型應用程序的工作方式,并為擴展提供了在應用程序上注冊操作的中心手段。相反,它是如何構(gòu)造或擴展應用程序的藍圖。 藍圖 之前我們已經(jīng)通過代碼了解了一些Flask基本的用法,現(xiàn)在出現(xiàn)一個問題,我們要做的功能越來越多,路由是不是都要放在run文件中呢?例如我們在不同的文件都定義了一些路由,如果想要訪問他...

    tianyu 評論0 收藏0
  • python大佬養(yǎng)成計劃----excel操作

    摘要:新型數(shù)據(jù)類型中存儲系列數(shù)據(jù),比較常見的數(shù)據(jù)類型有,除此之外,還有數(shù)據(jù)類型元組的只能通過訪問,模塊的子類不僅可以使用的訪問,還可以通過的進行訪問??梢詫⒗斫鉃橹械慕Y(jié)構(gòu),其首先將各個命名,然后對每個賦予數(shù)據(jù)。 namedtuple新型數(shù)據(jù)類型 Python中存儲系列數(shù)據(jù),比較常見的數(shù)據(jù)類型有l(wèi)ist,除此之外,還有tuple數(shù)據(jù)類型.tuple元組的item只能通過index訪問,coll...

    cpupro 評論0 收藏0
  • python大佬養(yǎng)成計劃----分布式進程

    摘要:分布式進程在和中,應當優(yōu)選,因為更穩(wěn)定,而且,可以分布到多臺機器上,而最多只能分布到同一臺機器的多個上。由于模塊封裝很好,不必了解網(wǎng)絡通信的細節(jié),就可以很容易地編寫分布式多進程程序。 分布式進程 在Thread和Process中,應當優(yōu)選Process,因為Process更穩(wěn)定,而且,Process可以分布到多臺機器上,而Thread最多只能分布到同一臺機器的多個CPU上。 Pytho...

    honmaple 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<