在日常中,經常會對一些字符,列表等進行比較,找出差異。例如可以在 excel 運用 mid 和 exact 結合對每個字符進行比較,如果遇上比較長的字符串時,顯然單純通過公式去比較,工作量是非常大,即使通過VBA加入循環,減少重復的公式量,得出的結果也比較零散,難以快速判斷。
str_1 : payload%3D%5B%7B%22code%22%3A%22city%22%2C%22name%22%3A%22%E4%B8%9C%E8%8E%9E%22%2C%22value%22%3A%222665%22%2C%22jsver%3Daplus_std%26lver%3D8.15.6%26pver%3D0.7.11%26cache%3Dd65781a%26page_cna%3DfE0tGdHBzCoCAXFtdrUNRwMz%26_slog%3D0
str_2: payload%3D%5B%7B%22code%22%3A%22city%22%2C%22name%22%3A%22%E4%B8%AD%E5%B1%B1%22%2C%22value%22%3A%222667%22%2C%22jsver%3Daplus_std%26lver%3D8.15.6%26pver%3D0.7.11%26cache%3Dbf6e196%26page_cna%3DfE0tGdHBzCoCAXFtdrUNRwMz%26_slog%3D0
對比分析上面兩個請求的 URL後綴 為例,可見兩個的請求的部分都非常相似。首先對整個字符串進行對比, 如下圖1
對比結果發現 這兩個字符串確實是存在差異,那究竟是在哪部分呢? 可以通過導入 difflib庫,利用它的 compare() 方法可以快速找出具體的差異。
首先經過觀察可以發現,在請求URL 的後綴部分,都包括payload, name,value 等關鍵字,可以先把它分割成單獨的行,打印 diff意見它的類型,可知是一個 generator object , 如下圖2
嘗試把 diff轉換成列表再打印,發現輸出的結果比較混亂,好難看到對比的結果, 如下圖3
把列表轉換成分行的字符串,'\n'.join(list(diff)),最後就可以輸出非常清晰的對比結果, 如下圖4
具體符合的定義, 如下圖5,difflib庫 還有其它的應用方法,具體可以參考其官方文檔。
圖1
圖2
圖3
圖4
圖5