摘要:模塊為的標(biāo)準(zhǔn)庫(kù)模塊,無(wú)需安裝。并且支持輸出可讀性比較強(qiáng)的文檔,與下的命令相似。模塊打開(kāi)文件只能寫(xiě)入類型不管字符串是什么編碼方式。
difflib模塊
difflib為python的標(biāo)準(zhǔn)庫(kù)模塊,無(wú)需安裝。用來(lái)對(duì)比文本之間的差異。并且支持輸出可讀性比較強(qiáng)的HTML文檔,與LInux下的diff 命令相似。在版本控制方面非常有用。codecs模塊
open打開(kāi)文件只能寫(xiě)入str類型,不管字符串是什么編碼方式。 但是有時(shí)候我們爬蟲(chóng)或者其他方式得到一些數(shù)據(jù)寫(xiě)入文件時(shí)會(huì)有編碼不統(tǒng)一的問(wèn)題,所以就一般都統(tǒng)一轉(zhuǎn)換為unicode。此時(shí)的open打開(kāi)文件會(huì)報(bào)錯(cuò)。 寫(xiě)入時(shí),如果參數(shù) 是unicode,則使用open()時(shí)指定的編碼進(jìn)行編碼后寫(xiě)入;如果是str,則先根據(jù)源代碼文件聲明的字符編碼,解碼成unicode后再進(jìn)行前述 操作。相對(duì)內(nèi)置的open()來(lái)說(shuō),這個(gè)方法比較不容易在編碼上出現(xiàn)問(wèn)題。difflib對(duì)比
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. 以字符串方式展示兩個(gè)文本的不同, 效果如下: 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方式展示兩個(gè)文本的不同, 瀏覽器打開(kāi): 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"命令
生成一個(gè)html文件,網(wǎng)頁(yè)讀取兩者不同之處
#!/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 - 返回一個(gè)html頁(yè)面 """ %(os.path.basename(sys.argv[0])))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42412.html
摘要:使用藍(lán)圖的概念來(lái)制作應(yīng)用程序組件和支持應(yīng)用程序內(nèi)部或跨應(yīng)用程序的通用模式。藍(lán)圖可以大大簡(jiǎn)化大型應(yīng)用程序的工作方式,并為擴(kuò)展提供了在應(yīng)用程序上注冊(cè)操作的中心手段。相反,它是如何構(gòu)造或擴(kuò)展應(yīng)用程序的藍(lán)圖。 藍(lán)圖 之前我們已經(jīng)通過(guò)代碼了解了一些Flask基本的用法,現(xiàn)在出現(xiàn)一個(gè)問(wèn)題,我們要做的功能越來(lái)越多,路由是不是都要放在run文件中呢?例如我們?cè)诓煌奈募级x了一些路由,如果想要訪問(wèn)他...
摘要:新型數(shù)據(jù)類型中存儲(chǔ)系列數(shù)據(jù),比較常見(jiàn)的數(shù)據(jù)類型有,除此之外,還有數(shù)據(jù)類型元組的只能通過(guò)訪問(wèn),模塊的子類不僅可以使用的訪問(wèn),還可以通過(guò)的進(jìn)行訪問(wèn)。可以將理解為中的結(jié)構(gòu),其首先將各個(gè)命名,然后對(duì)每個(gè)賦予數(shù)據(jù)。 namedtuple新型數(shù)據(jù)類型 Python中存儲(chǔ)系列數(shù)據(jù),比較常見(jiàn)的數(shù)據(jù)類型有l(wèi)ist,除此之外,還有tuple數(shù)據(jù)類型.tuple元組的item只能通過(guò)index訪問(wèn),coll...
摘要:分布式進(jìn)程在和中,應(yīng)當(dāng)優(yōu)選,因?yàn)楦€(wěn)定,而且,可以分布到多臺(tái)機(jī)器上,而最多只能分布到同一臺(tái)機(jī)器的多個(gè)上。由于模塊封裝很好,不必了解網(wǎng)絡(luò)通信的細(xì)節(jié),就可以很容易地編寫(xiě)分布式多進(jìn)程程序。 分布式進(jìn)程 在Thread和Process中,應(yīng)當(dāng)優(yōu)選Process,因?yàn)镻rocess更穩(wěn)定,而且,Process可以分布到多臺(tái)機(jī)器上,而Thread最多只能分布到同一臺(tái)機(jī)器的多個(gè)CPU上。 Pytho...
閱讀 998·2021-11-24 10:30
閱讀 2322·2021-10-08 10:04
閱讀 3962·2021-09-30 09:47
閱讀 1444·2021-09-29 09:45
閱讀 1440·2021-09-24 10:33
閱讀 6255·2021-09-22 15:57
閱讀 2354·2021-09-22 15:50
閱讀 4085·2021-08-30 09:45