日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python自动化运维——文件与目录差异对比

發(fā)布時間:2024/9/30 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python自动化运维——文件与目录差异对比 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模塊:filecmp

安裝:Python版本大于等于2.3默認(rèn)自帶

功能:實現(xiàn)文件、目錄、遍歷子目錄的差異

常用方法:

1.單文件對比(cmp):

  • 采用filecmp.cmp(f1,f2[,shallow]) 方法,[]可空
  • 比較f1和f2文件,相同返回True,否則False
  • shallow默認(rèn)為True,意思是只根據(jù)os.stat()
    方法返回的文件基本信息進行對比,即文件基本信息。當(dāng)為False時,os.stat() 與文件內(nèi)容同時進行校驗

2.多文件對比(cmpfiles):

  • 采用filecmp.cmpfiles(dir1,dir2,common[,shallow]) 方法
  • 對比dir1和dir2目錄給定的文件清單。
  • 此方法返回文件名的三個列表:匹配、不匹配、錯誤
  • 匹配:包含匹配的文件的列表
  • 不匹配:與匹配相反
  • 錯誤:目錄不存在文件、不具備讀權(quán)限或其他原因?qū)е碌牟荒鼙容^的文件清單

3.目錄對比(dircmp):

  • 使用dircmp(a,b[,ignore[,hide]]) 類創(chuàng)建一個目錄比較對象

  • a和b是參加比較的目錄名;

  • ignore代表文件名忽略的列表,默認(rèn)為[‘RCS’,‘CVS’,‘tags’];

  • hide代表隱藏的列表,默認(rèn)為[os.curdir,os.pardir]。

  • dircmp類可以獲得目錄較為詳細(xì)的信息

  • dircmp提供了三個輸出報告的方法:

    1:report(),比較當(dāng)前指定目錄中的內(nèi)容
    2:report_partial_closure(),比較當(dāng)前指定目錄及第一級子目錄中的內(nèi)容
    3:report_full_closure(),遞歸比較所有指定目錄的內(nèi)容

  • dircmp為輸出提供了更加詳細(xì)的比較結(jié)果,提供了如下屬性:

    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的目錄差異:(先自定義目錄下的文件與目錄,再使用)

學(xué)習(xí)python中有什么不懂的地方,小編這里推薦加小編的python學(xué)習(xí)群:895 817 687 有任何不懂的都可以在里面交流,還有很好的視頻教程pdf學(xué)習(xí)資料,大家一起學(xué)習(xí)交流!1 #import filecmp2 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 # 根據(jù)上述屬性,以此類推

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

1 #import os2 3 #import sys4 5 #import filecmp6 7 #import re8 9 #import shutil10 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 # 不匹配文件,源目錄文件已發(fā)生變化24 25 # dirpath=os.path.abspath(dir1) # 定義源目錄絕對路徑26 27 # # 將更新文件名或目錄追加到holderlist28 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 holderlist42 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=False72 73 #74 75 # for item in source_files: # 遍歷返回的差異文件或目錄清單76 77 # destination_dir=re.sub(dir1,dir2,item) # 將源目錄差異路徑清單對應(yīng)替換成備份目錄78 79 # destination_files.append( destination_dir)80 81 # if os.path.isdir(item): # 如果差異路徑為目錄且不存在,則在備份目錄中創(chuàng)建82 83 # if not os.path.exists(destination_dir):84 85 # os.makedirs(destination_dir)86 87 # createdir_bool=True88 89 # if createdir_bool: # 重新調(diào)用,重新遍歷新創(chuàng)建目錄的內(nèi)容90 91 # destination_files=[]92 93 # source_files=[]94 95 # source_files=compareme(dir1,dir2)96 97 # for item in source_files: # 獲取源目錄差異路徑清單,對應(yīng)替換成備份目錄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]): # 判斷是否是文件,然后進行復(fù)制操作 112 113 # shutil.copyfile(item[0],item[1]) 114 115 # 116 117 #if __name__='__main__': 118 119 # main()

總結(jié)

以上是生活随笔為你收集整理的Python自动化运维——文件与目录差异对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。