有時候我們無法確認備份目錄與源目錄檔案是否保持一致,包括源目錄中的新檔案或目錄、更新檔案或目錄有無成功同步,定期進行校驗,沒有成功則希望有針對性地進行補備份。本示例使用了filecmp模組的left_only、diff_files方法遞迴獲取源目錄的更新項,再通過shutil.copyfile、os.makedirs方法對更新項進行複製,最終保持一致狀態。詳細原始碼如下:
#!/usr/bin/env python
import os, sys
import filecmp
import re
import shutil
holderlist=
defcompareme
(dir1, dir2):
#遞迴獲取更新項函式
dircomp=filecmp.dircmp(dir1,dir2)
only_in_one=dircomp.left_only #源目錄新檔案或目錄
diff_in_one=dircomp.diff_files #不匹配檔案,源目錄檔案已發生變化
dirpath=os.path.abspath(dir1) #定義源目錄絕對路徑
#將更新檔名或目錄追加到holderlist
if len(dircomp.common_dirs) > 0: #判斷是否存在相同子目錄,以便遞迴
for item in dircomp.common_dirs: #遞迴子目錄
compareme(os.path.abspath(os.path.join(dir1,item)), \
os.path.abspath(os.path.join(dir2,item)))
return holderlist
defmain
():if len(sys.argv) > 2: #要求輸入源目錄與備份目錄
dir1=sys.argv[1]
dir2=sys.argv[2]
else:
print("usage: ", sys.argv[0], "datadir backupdir")
sys.exit()
source_files=compareme(dir1,dir2) #對比源目錄與備份目錄
dir1=os.path.abspath(dir1)
ifnot dir2.endswith('/'): dir2=dir2+'/'
#備份目錄路徑加「/」符
dir2=os.path.abspath(dir2)
destination_files=
createdir_bool=false
print(source_files)
try:
for item in source_files: # 遍歷返回的差異檔案或目錄清單
destination_dir = re.sub(dir1, dir2, item) # 將源目錄差異路徑清單對應替換成
# 備份目錄
if os.path.isdir(item): # 如果差異路徑為目錄且不存在,則在備份目錄中建立
ifnot os.path.exists(destination_dir):
os.makedirs(destination_dir)
createdir_bool = true
# 再次呼叫compareme函式標記
except typeerror as e:
print('except:', e)
return
if createdir_bool: #重新呼叫compareme函式,重新遍歷新建立目錄的內容
destination_files=
source_files=
source_files=compareme(dir1,dir2) #呼叫compareme函式
for item in source_files: #獲取源目錄差異路徑清單,對應替換成備份目錄
destination_dir=re.sub(dir1, dir2, item)
print("update item:")
print(source_files) #輸出更新項列表清單
copy_pair=list(zip(source_files,destination_files)) #將源目錄與備份目錄檔案清單拆分成元組
for item in copy_pair:
if os.path.isfile(item[0]): #判斷是否為檔案,是則進行複製操作
shutil.copyfile(item[0], item[1])
if __name__ == '__main__':
main()
python3換源 Python3 換源
pip安裝源 介紹2 常用pip源 豆瓣 阿里 3 加速安裝的命令 pip install i 模組名 永久配置安裝源 windows 2 新建 pip 資料夾並在資料夾中新建 pip.ini 配置檔案 3 新增 pip.ini 配置檔案內容 macos linux 1 在使用者根目錄下 下建立 p...
Python之 校驗源目錄與備份目錄差異
有時候我們無法確認備份目錄與源目錄的檔案是否保持一致,包括源目錄中的新檔案或目錄,更新檔案或目錄有無成功同步,定期進行校驗,沒有成功則希望有針對性的進行補備份。本例項使用了filecmp模組的left only,diff files方法地櫃獲取源目錄的更新項,再通過shutil.copyfile o...
python換源 python3 換源
1.原因 pip是很強大的模組安裝工具,但是由於國外官方pypi經常被牆,導致不可用。所以我們最好是更換pip源,這樣就能解決被牆導致的裝不上庫的問題。2.可用源 網上有很多可用的源 豆瓣 清華 清華大學的pip源,它是官網pypi的映象,每隔5分鐘同步一次,推薦使用。3.使用 3.1 臨時使用 可...