difflibpython
① python 有沒有一個模塊可以比較兩個文本文件內容差異的而且可以只輸出差異的部分
difflib是python提供的比較序列(string list)差異的模塊。實現了三個類:
1>SequenceMatcher 任意類型序列的比較 (可以比較字元串)
2>Differ 對字元串進行比較
3>HtmlDiff 將比較結果輸出為html格式.
建議你使用SequenceMatcher比較器,給你個例子吧。
SequenceMatcher實例:
import difflib
from pprint import pprint
a = 'pythonclub.org is wonderful'
b = 'Pythonclub.org also wonderful'
s = difflib.SequenceMatcher(None, a, b)
print "s.get_matching_blocks():"
pprint(s.get_matching_blocks())
print "s.get_opcodes():"
for tag, i1, i2, j1, j2 in s.get_opcodes():
print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))
輸出為:
s.get_matching_blocks():
[(1, 1, 14), (16, 17, 1), (17, 19, 10), (27, 29, 0)]
s.get_opcodes():
replace a[0:1] (p) b[0:1] (P)
equal a[1:15] (ythonclub.org ) b[1:15] (ythonclub.org )
replace a[15:16] (i) b[15:17] (al)
equal a[16:17] (s) b[17:18] (s)
insert a[17:17] () b[18:19] (o)
equal a[17:27] ( wonderful) b[19:29] ( wonderful)
SequeceMatcher(None,a,b)創建序列比較對象,將以a作為參考標准進行
Sequecematcher(None,b,a)創建序列比較對象,將以b作為參考標准進行
a,b表示待比較的兩個序列,生成序列比較對象後,調用該對象的get_opcodes()方法,將返回一個元組(tag,i1,i2,j1,j2).tag表示序列分片的比較結果.i1,i2表示序列a的索引,j1,j2表示序列b的索引.
get_opcodes()返回元組(tag,i1,i2,j1,j2)的含義
② python中是否有用於計算兩個字元串相似度的函數
linux環境下,沒有首先安裝python_Levenshtein,用法如下:
重點介紹幾個該包中的幾個計算字串相似度的幾個函數實現。
1. Levenshtein.hamming(str1, str2)
計算漢明距離。要求str1和str2必須長度一致。是描述兩個等長字串之間對應位置上不同字元的個數。如
2. Levenshtein.distance(str1, str2)
計算編輯距離(也成Levenshtein距離)。是描述由一個字串轉化成另一個字串最少的操作次數,在其中的操作包括插入、刪除、替換。如
演算法實現 參考動態規劃整理:http://www.cnblogs.com/kaituorensheng/archive/2013/05/15/3080990.html。
3. Levenshtein.ratio(str1, str2)
計算萊文斯坦比。計算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的長度總和,ldist是類編輯距離
注意:這里的類編輯距離不是2中所說的編輯距離,2中三種操作中每個操作+1,而在此處,刪除、插入依然+1,但是替換+2
這樣設計的目的:ratio('a', 'c'),sum=2,按2中計算為(2-1)/2 = 0.5,』a','c'沒有重合,顯然不合算,但是替換操作+2,就可以解決這個問題。
4. Levenshtein.jaro(s1, s2)
計算jaro距離,
其中的m為s1, s2的匹配長度,當某位置的認為匹配 當該位置字元相同,或者在不超過
t是調換次數的一半
5. Levenshtein.jaro_winkler(s1, s2)
計算Jaro–Winkler距離
③ python怎麼兩兩查找多個文件相同內容
可以用 difflib庫,下面給一個例子,具體需求自己研究
假如在同一個目錄下有a.txt, b.txt 兩個文本文件
a.txt 內容是
aaa
bbb
b.txt內容是
aaa
ccc
import difflib
a = open('a.txt', 'U').readlines()
b = open('b.txt', 'U').readlines()
diff = difflib.ndiff(a, b)
sys.stdout.writelines(diff)
結果是:
aaa
- bbb+ ccc
④ 在python中一共有多少個標准庫
Python 語言官方的參考手冊鍾,介紹了與 Python 一同發行的標准庫。
文本處理服務
string--- 常見的字元串操作
re--- 正則表達式操作
difflib--- 計算差異的輔助工具
textwrap--- 文本自動換行與填充
unicodedata--- Unicode 資料庫
stringprep--- 網際網路字元串預備
readline--- GNU readline 介面
rlcompleter--- GNU readline 的補全函數
二進制數據服務
struct--- 將位元組串解讀為打包的二進制數據
codecs--- 編解碼器注冊和相關基類
數據類型
datetime--- 基本日期和時間類型
zoneinfo--- IANA 時區支持
calendar--- 日歷相關函數
collections--- 容器數據類型
collections.abc--- 容器的抽象基類
heapq--- 堆隊列演算法
bisect--- 數組二分查找演算法
array--- 高效的數值數組
weakref--- 弱引用
types--- 動態類型創建和內置類型名稱
--- 淺層 (shallow) 和深層 (deep) 復制操作
pprint--- 數據美化輸出
reprlib--- 另一種repr()實現
enum--- 對枚舉的支持
graphlib--- 操作類似圖的結構的功能
數字和數學模塊
numbers--- 數字的抽象基類
math--- 數學函數
cmath--- 關於復數的數學函數
decimal--- 十進制定點和浮點運算
fractions--- 分數
random--- 生成偽隨機數
statistics--- 數學統計函數
函數式編程模塊
itertools--- 為高效循環而創建迭代器的函數
functools--- 高階函數和可調用對象上的操作
operator--- 標准運算符替代函數
文件和目錄訪問
pathlib--- 面向對象的文件系統路徑
os.path--- 常用路徑操作
fileinput--- 迭代來自多個輸入流的行
stat--- 解析stat()結果
filecmp--- 文件及目錄的比較
tempfile--- 生成臨時文件和目錄
glob--- Unix 風格路徑名模式擴展
fnmatch--- Unix 文件名模式匹配
linecache--- 隨機讀寫文本行
shutil--- 高階文件操作
數據持久化
pickle--- Python 對象序列化
reg--- 注冊配合pickle模塊使用的函數
shelve--- Python 對象持久化
marshal--- 內部 Python 對象序列化
dbm--- Unix "資料庫" 介面
sqlite3--- SQLite 資料庫 DB-API 2.0 介面模塊
數據壓縮和存檔
zlib--- 與gzip兼容的壓縮
gzip--- 對gzip格式的支持
bz2--- 對bzip2壓縮演算法的支持
lzma--- 用 LZMA 演算法壓縮
zipfile--- 使用ZIP存檔
tarfile--- 讀寫tar歸檔文件
文件格式
csv--- CSV 文件讀寫
configparser--- 配置文件解析器
tomllib--- Parse TOML files
netrc--- netrc 文件處理
plistlib--- 生成與解析 Apple.plist文件
加密服務
hashlib--- 安全哈希與消息摘要
hmac--- 基於密鑰的消息驗證
secrets--- 生成管理密碼的安全隨機數
通用操作系統服務
os--- 多種操作系統介面
io--- 處理流的核心工具
time--- 時間的訪問和轉換
argparse--- 命令行選項、參數和子命令解析器
getopt--- C 風格的命令行選項解析器
logging--- Python 的日誌記錄工具
logging.config--- 日誌記錄配置
logging.handlers--- 日誌處理程序
getpass--- 攜帶型密碼輸入工具
curses--- 終端字元單元顯示的處理
curses.textpad--- 用於 curses 程序的文本輸入控制項
curses.ascii--- 用於 ASCII 字元的工具
curses.panel--- curses 的面板棧擴展
platform--- 獲取底層平台的標識數據
errno--- 標准 errno 系統符號
ctypes--- Python 的外部函數庫
並發執行
threading--- 基於線程的並行
multiprocessing--- 基於進程的並行
multiprocessing.shared_memory--- Shared memory for direct access across processes
concurrent包
concurrent.futures--- 啟動並行任務
subprocess--- 子進程管理
sched--- 事件調度器
queue--- 一個同步的隊列類
contextvars--- 上下文變數
_thread--- 底層多線程 API
網路和進程間通信
asyncio--- 非同步 I/O
socket--- 底層網路介面
ssl--- 套接字對象的 TLS/SSL 包裝器
select--- 等待 I/O 完成
selectors--- 高級 I/O 復用庫
signal--- 設置非同步事件處理程序
mmap--- 內存映射文件支持
互聯網數據處理
email--- 電子郵件與 MIME 處理包
json--- JSON 編碼和解碼器
mailbox--- 操作多種格式的郵箱
mimetypes--- 映射文件名到 MIME 類型
base64--- Base16, Base32, Base64, Base85 數據編碼
binascii--- 二進制和 ASCII 碼互轉
quopri--- 編碼與解碼經過 MIME 轉碼的可列印數據
結構化標記處理工具
html--- 超文本標記語言支持
html.parser--- 簡單的 HTML 和 XHTML 解析器
html.entities--- HTML 一般實體的定義
XML處理模塊
xml.etree.ElementTree--- ElementTree XML API
xml.dom--- 文檔對象模型 API
xml.dom.minidom--- 最小化的 DOM 實現
xml.dom.pulldom--- 支持構建部分 DOM 樹
xml.sax--- 支持 SAX2 解析器
xml.sax.handler--- SAX 處理句柄的基類
xml.sax.saxutils--- SAX 工具集
xml.sax.xmlreader--- 用於 XML 解析器的介面
xml.parsers.expat--- 使用 Expat 的快速 XML 解析
互聯網協議和支持
webbrowser--- 方便的 Web 瀏覽器控制工具
wsgiref--- WSGI 工具和參考實現
urllib--- URL 處理模塊
urllib.request--- 用於打開 URL 的可擴展庫
urllib.response--- urllib 使用的 Response 類
urllib.parse用於解析 URL
urllib.error--- urllib.request 引發的異常類
urllib.robotparser--- robots.txt 語法分析程序
http--- HTTP 模塊
http.client--- HTTP 協議客戶端
ftplib--- FTP 協議客戶端
poplib--- POP3 協議客戶端
imaplib--- IMAP4 協議客戶端
smtplib--- SMTP 協議客戶端
uuid---RFC 4122定義的UUID對象
socketserver--- 用於網路伺服器的框架
http.server--- HTTP 伺服器
http.cookies--- HTTP狀態管理
http.cookiejar—— HTTP 客戶端的 Cookie 處理
xmlrpc--- XMLRPC 服務端與客戶端模塊
xmlrpc.client--- XML-RPC 客戶端訪問
xmlrpc.server--- 基本 XML-RPC 伺服器
ipaddress--- IPv4/IPv6 操作庫
多媒體服務
wave--- 讀寫WAV格式文件
colorsys--- 顏色系統間的轉換
國際化
gettext--- 多語種國際化服務
locale--- 國際化服務
程序框架
turtle--- 海龜繪圖
cmd--- 支持面向行的命令解釋器
shlex—— 簡單的詞法分析
Tk圖形用戶界面(GUI)
tkinter—— Tcl/Tk 的 Python 介面
tkinter.colorchooser--- 顏色選擇對話框
tkinter.font--- Tkinter 字體封裝
Tkinter 對話框
tkinter.messagebox--- Tkinter 消息提示
tkinter.scrolledtext--- 滾動文字控制項
tkinter.dnd--- 拖放操作支持
tkinter.ttk--- Tk 風格的控制項
tkinter.tix--- TK擴展包
⑤ Python編程常用技巧
清理用戶輸入
對輸入的的值進行清理處理,是常見的程序要求。比如要做大小寫轉化、要驗證輸入字元的注入,通常可以通過寫正則用Regex來做專項任務。但是對於復雜的情況,可以用一些技巧,比如下面:
user_input = "This string has some whitespaces... "
character_map = {
ord(' ') : ' ',
ord(' ') : ' ',
ord(' ') : None
}
在此示例中,可以看到空格字元" "和" "都被替換為空格,而 " "被刪除。
這是一個簡單的示例,我們還可以使用unicodedata包和combinin()函數來生成大的映射表,以生成映射來替換字元串。
提示用戶輸入
命令行工具或腳本需要輸入用戶名和密碼才能操作。要用這個功能,一個很有用的技巧是使用getpass模塊:
import getpass
user = getpass.getuser()
password = getpass.getpass()
這三行代碼就可以讓我們優雅的交互提醒用戶輸入輸入密碼並捕獲當前的系統用戶和輸入的密碼,而且輸入密碼時候會自動屏蔽顯示,以防止被人竊取。
查找字元串頻率
如果需要使用查找類似於某些輸入字元串的單詞,可以使用difflib來實現:
import difflib
difflib.get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'], n=2)
# 返回['apple', 'ape']
difflib.get_close_matches會查找相似度最匹配的字串。本例中,第一個參數與第二個參數匹配。提供可選參數n,該參數指定要返回的最大匹配數,以及參數cutoff(默認值為0.6)設置為thr確定匹配字元串的分數。
關於Python編程常用技巧,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。
⑥ python標准庫有哪些
Python標准庫的內容涵蓋了非常多的功能,主要包括文件、字元串和數字處理,數據結構、網路編程、操作系統用戶界面、網頁測試、線程以及其它的工具。
具體有,1、文件操作相關的模塊,os,os。
path,shutil,errno,stat,glob,fnmatch,tempfile等。
2、字元串和文本處理模塊,string,re,difflib和textwrap等。
3、數據結構形式,collections,bisect,array,heapq,queue,struct和weakref等。
4、網路編程與操作系統,SocketServer,socket,selectselectors,threading,multiprocessing,subprocess,mmap,sched,asyncore等。
5、網頁測試,urllib,扮態urllib2,配則httplib,ftplib,gopherlib,spider等。
6、解析和處理XML,HTMLParser,ElementTree,XMLParser,XMLWriter,SAX,minidom,expat等。
7、除此之廳賣源外,還包含一些其他方便實用的部分,如BaseHTTPServer,CGIHTTPServer,Cookie,templating,xmlrpclib,formatter,email等。
此外,Python還支持第三方庫和框架,有很多實用的框架和工具可以讓開發者高效、便捷地完成國家工作。
⑦ 如何找到適合需求的 Python 庫
這是個很好的問題,Python 的標准庫、第三方庫那麼多,怎麼快速根據一個模糊的需求定位到自己需要的庫呢?
直接答案,就是:Google。
-----------------------
下面講講理由吧。
awesome-python 系列確實大都是 Python 開源世界的精品,但是這樣一個聚合的列表,乍一看都知道了,卻很難在需要使用的時候快速定位上去。其實,awesome-python 系列可以作為你平時積累和學習的目錄,但是,在要快速找到一個輪子造車的時候,還是 Google 更好用了。
比如,你想要用 Python 比較文本相似度,可以在 Google 搜索關鍵詞「Python string similarity」。記住,搜索的時候用空格分隔幾個關鍵詞,不要寫一句完整的話來做搜索。
在 Google 得到如下結果:
前三個答案的結果分別是 difflib(1, 3) 、FuzzyWuzzy (2),在第二個答案中,有這樣一句話:
分別是不同版本的官方文檔,裡面有詳細的示例代碼可以參考。
-------------------------
除此之外,Python 官方文檔中有一個「Python HOWTOs」系列,強烈建議每個 Python 開發者都認真學習一遍。要是你有足夠的時間或者你有足夠的熱情,通讀一次官方文檔)當然是最好不過的了,尤其是「 The Python Standard Library 」這部分。
-------------------------
個人認為,通過 Google 搜索技術問題,最好的方式就是提到點上,不要長篇大論,不要使用問句句式,將問題歸結為幾個關鍵詞再搜索,往往可以在較短時間里得到滿意的回答。這不只限於 Python 常用庫的搜索,也包括其它技術問題、其它語言甚至其它非技術問題,這樣的搜索往往會更快得到你需要的。