摘要:模塊為的標準庫模塊,無需安裝。并且支持輸出可讀性比較強的文檔,與下的命令相似。模塊打開文件只能寫入類型不管字符串是什么編碼方式。
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))
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))
使調(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
摘要:使用藍圖的概念來制作應用程序組件和支持應用程序內(nèi)部或跨應用程序的通用模式。藍圖可以大大簡化大型應用程序的工作方式,并為擴展提供了在應用程序上注冊操作的中心手段。相反,它是如何構(gòu)造或擴展應用程序的藍圖。 藍圖 之前我們已經(jīng)通過代碼了解了一些Flask基本的用法,現(xiàn)在出現(xiàn)一個問題,我們要做的功能越來越多,路由是不是都要放在run文件中呢?例如我們在不同的文件都定義了一些路由,如果想要訪問他...
摘要:新型數(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...
摘要:分布式進程在和中,應當優(yōu)選,因為更穩(wěn)定,而且,可以分布到多臺機器上,而最多只能分布到同一臺機器的多個上。由于模塊封裝很好,不必了解網(wǎng)絡通信的細節(jié),就可以很容易地編寫分布式多進程程序。 分布式進程 在Thread和Process中,應當優(yōu)選Process,因為Process更穩(wěn)定,而且,Process可以分布到多臺機器上,而Thread最多只能分布到同一臺機器的多個CPU上。 Pytho...
閱讀 1059·2021-11-24 10:30
閱讀 2385·2021-10-08 10:04
閱讀 4048·2021-09-30 09:47
閱讀 1540·2021-09-29 09:45
閱讀 1517·2021-09-24 10:33
閱讀 6363·2021-09-22 15:57
閱讀 2403·2021-09-22 15:50
閱讀 4140·2021-08-30 09:45