Python自動化運維——文件與目錄差異對比

来源:https://www.cnblogs.com/Infi-chu/archive/2017/12/26/8120276.html
-Advertisement-
Play Games

Infi-chu: http://www.cnblogs.com/Infi-chu/ 模塊:filecmp 安裝:Python版本大於等於2.3預設自帶 功能:實現文件、目錄、遍歷子目錄的差異 常用方法: 1.單文件對比(cmp): 2.多文件對比(cmpfiles): 3.目錄對比(dircmp) ...


Infi-chu:

http://www.cnblogs.com/Infi-chu/

模塊:filecmp

安裝:Python版本大於等於2.3預設自帶

功能:實現文件、目錄、遍歷子目錄的差異

常用方法:

1.單文件對比(cmp):

  1. 採用filecmp.cmp(f1,f2[,shallow]) 方法,[]可空
  2. 比較f1和f2文件,相同返回True,否則False
  3. shallow預設為True,意思是只根據os.stat() 方法返回的文件基本信息進行對比,即文件基本信息。當為False時,os.stat() 與文件內容同時進行校驗

2.多文件對比(cmpfiles):

  1. 採用filecmp.cmpfiles(dir1,dir2,common[,shallow]) 方法
  2. 對比dir1和dir2目錄給定的文件清單。
  3. 此方法返迴文件名的三個列表:匹配、不匹配、錯誤
  4. 匹配:包含匹配的文件的列表
  5. 不匹配:與匹配相反
  6. 錯誤:目錄不存在文件、不具備讀許可權或其他原因導致的不能比較的文件清單

3.目錄對比(dircmp):

  1. 使用dircmp(a,b[,ignore[,hide]]) 類創建一個目錄比較對象
  2. a和b是參加比較的目錄名;
  3. ignore代表文件名忽略的列表,預設為['RCS','CVS','tags'];
  4. hide代表隱藏的列表,預設為[os.curdir,os.pardir]。
  5. dircmp類可以獲得目錄較為詳細的信息
  6. dircmp提供了三個輸出報告的方法:
    1. report(),比較當前指定目錄中的內容
    2. report_partial_closure(),比較當前指定目錄及第一級子目錄中的內容
    3. report_full_closure(),遞歸比較所有指定目錄的內容
  7. dircmp為輸出提供了更加詳細的比較結果,提供瞭如下屬性:
    1. left,左目錄,如上述的a
    2. right,右目錄,如上述的b
    3. left_list,左目錄中的文件及目錄列表
    4. right_list,右目錄中的文件及目錄列表
    5. common,兩邊目錄共同存在的文件或目錄
    6. left_only,只在左目錄中的文件或目錄
    7. right_only,只在右目錄中的文件或目錄
    8. common_dirs,兩邊目錄都存在的子目錄
    9. common_files,兩邊目錄都存在的子文件
    10. common_funny,兩邊目錄都存在的子目錄(不同目錄類型或os.stat()記錄的錯誤)
    11. same_files,匹配相同的文件
    12. diff_files,不匹配的文件
    13. funny_files,兩邊目錄中都存在,但無法比較的文件
    14. subdirs,將common_dirs目錄名映射到新的dircmp對象,格式是字典類型

比較dir1和dir2的目錄差異:(先自定義目錄下的文件與目錄,再使用)

 1 #import filecmp
 2 
 3 #a='/home/test/filecmp/dir1' # 左目錄
 4 
 5 #b='/home/test/filecmp/dir2' # 右目錄
 6 
 7 #dir_obj=filecmp.dircmp(a,b)
 8 
 9 #dir_obj.report()
10 
11 #dir_obj.report_partial_closure()
12 
13 #dir_obj.report_full_closure()
14 
15 #print('left_list:'+str(dir_obj.left_list))
16 
17 #print('right_list:'+str(dir_obj.right_list))
18 
19 #print('common'+str(dir_obj.common))
20 
21 # 根據上述屬性,以此類推

校驗源目錄與備份目錄的差異:

  1 #import os
  2 
  3 #import sys
  4 
  5 #import filecmp
  6 
  7 #import re
  8 
  9 #import shutil
 10 
 11 #
 12 
 13 #holderlist=[]
 14 
 15 #
 16 
 17 #def compare(dir1,dir2): # 遞歸獲取更新項
 18 
 19 # dircomp=filecmp.dircmp(dir1,dir2)
 20 
 21 # only_in_one=dircomp.left_only # 源目錄更新文件或目錄
 22 
 23 # diff_in_one=dircomp.diff_files # 不匹配文件,源目錄文件已發生變化
 24 
 25 # dirpath=os.path.abspath(dir1) # 定義源目錄絕對路徑
 26 
 27 # # 將更新文件名或目錄追加到holderlist
 28 
 29 # [holderlist.append(os.path.abspath(os.path.join(dir1,x))) for x in only_in_one]
 30 
 31 # [holderlist.append(os.path.abspath(os.path.join(dir1,x))) for x in diff_in_one]
 32 
 33 # if len(dircomp.common_dirs) > 0: # 判斷目錄是否存在相同子目錄,便於遞歸
 34 
 35 # for item in dircomp.common_dirs: # 遞歸子目錄
 36 
 37 # compareme(os.path.abspath(os.path.join(dir1,item)), \
 38 
 39 # os.path.abspath(os.path.join(dir2,item)))
 40 
 41 # return holderlist
 42 
 43 #
 44 
 45 #def main:
 46 
 47 # if len(sys.argv) > 2: # 要求輸入源目錄與備份目錄
 48 
 49 # dir1=sys.argv[1]
 50 
 51 # dir2=sys.argv[2]
 52 
 53 # else:
 54 
 55 # print('使用:',sys.argv[0],'源目錄 備份目錄')
 56 
 57 # sys.exit()
 58 
 59 # source_files=compareme(dir1,dir2) # 對比兩個目錄
 60 
 61 # dir1=os.path.abspath(dir1)
 62 
 63 # if not dir2.endswith('/'):
 64 
 65 # dir2=dir2+'/' # 備份目錄路徑加'/' 符
 66 
 67 # dir2=os.path.abspath(dir2)
 68 
 69 # destination_files=[]
 70 
 71 # createdir_bool=False
 72 
 73 #
 74 
 75 # for item in source_files: # 遍歷返回的差異文件或目錄清單
 76 
 77 # destination_dir=re.sub(dir1,dir2,item) # 將源目錄差異路徑清單對應替換成備份目錄
 78 
 79 # destination_files.append( destination_dir)
 80 
 81 # if os.path.isdir(item): # 如果差異路徑為目錄且不存在,則在備份目錄中創建
 82 
 83 # if not os.path.exists(destination_dir):
 84 
 85 # os.makedirs(destination_dir)
 86 
 87 # createdir_bool=True
 88 
 89 # if createdir_bool: # 重新調用,重新遍歷新創建目錄的內容
 90 
 91 # destination_files=[]
 92 
 93 # source_files=[]
 94 
 95 # source_files=compareme(dir1,dir2)
 96 
 97 # for item in source_files: # 獲取源目錄差異路徑清單,對應替換成備份目錄
 98 
 99 # destination_dir=re.sub(dir1,dir2,item)
100 
101 # destination_files.append(destination_dir)
102 
103 # print('更新項:')
104 
105 # print(source_files) # 輸出更新項列表清單
106 
107 # copy_pair=zip(source_files,destination_files) # 將源目錄與備份目錄文件清單差分成元組
108 
109 # for item in copy_pair:
110 
111 # if os.path.isfile(item[0]): # 判斷是否是文件,然後進行複製操作
112 
113 # shutil.copyfile(item[0],item[1])
114 
115 #
116 
117 #if __name__='__main__':
118 
119 # main()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面: 文件上傳方式很多的,對於大文件的上傳,在本次項目中也有涉及,主要是用了分片斷點上傳大文件。所以就去瞭解了一下WebUploader,先從簡單的上傳文件開始吧~ 在代碼中寫註釋,這樣看的比較好點,那就直接上代碼來看瞭解實現的過程吧。 前臺jsp頁面: 後臺action: struts.xm ...
  • ##補充:列表生成器 1 #兩個理解例子 2 a=[x**2 for x in range(10)] #取x,然後執行x**2,在存放到列表裡面 3 print(a) #[0,1,4,9,16,25,36,49,64,81] 4 5 def f(n): 6 return n**2 7 a=[f(x) ...
  • 1 package demo; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; ... ...
  • 反射 一.獲得Class文件對象的三種方式(返回值都是Class類的對象) 1.通過類名調用class()獲得。 格式:類名.class(); 2.通過對象調用getClass()方法獲得; 格式:對象名.getClass(); 3.通過Class類的靜態方法forName()獲得 格式:Class ...
  • c3p0-0.9.2.1 jar包和mchange-commons-java-0.2.3.4 jar 包 下載地址: https://pan.baidu.com/s/1jHDiR7g 密碼 tyek ...
  • 環境:python3.6 目的:根據列表 中的字元串導入對應模塊 僅筆記,並知道有什麼實際用處 ...
  • ##閉包 :內部函數,在外部調用不在他函數範圍的變數 def outer(): x=10 def inner(): print(x) return inner #outer()() f=outer() f() 這裡inner就是一個閉包,閉包=內部函數+環境,這裡環境是x=10。閉包是為瞭解釋調用不 ...
  • node-schedule每次都是通過新建一個scheduleJob對象來執行具體方法。 時間數值按下表表示 指定時間有兩種方式1 字元串指定 *之間一定要加空格,否則不執行 每到秒數為4的倍數時執行 在秒位*後加/4 和後面的*之間要有空格schedule.scheduleJob('*/4 * * ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...