python入門-簡單的文件備份程序

因爲備份的須要,須要常常備份一些重要的文件,可是又不能逐個比較,因此就度了一下,找到了這篇博文,在此表示感謝,下面是python3版的寫法,其中有一些改變,重要的改變之處做出了簡要註釋,完整註釋請參考原文,python

重要:下面代碼未經充分測試,在備份本身文件以前,請充分測試,若有疏漏之處,歡迎留言,一塊兒學習web

注意:注意路徑的分割斜槓,在這裏是斜槓/而非反斜槓\
函數

md5校驗選擇備份學習

 1 # -*- coding: utf-8 -*-
 2 
 3 
 4 import hashlib
 5 import os
 6 import shutil
 7 
 8 
 9 def md5check(fname):
10     m = hashlib.md5()
11     with open(fname, 'rb') as f: # 這裏文件的打開方式與原文不一樣,因爲在備份個人文件時出現了編碼問題,因此進行了修改,以二進制方式打開
12         while True:
13             data = f.read(4096)
14             if not data:
15                 break
16             m.update(data)
17     return m.hexdigest()
18 
19 
20 
21 
22 # 文件複製函數
23 def copy(path):
24     new_path = path
25     new_path = new_path.replace(old_source, new_source)
26     print(new_path)
27     if os.path.isfile(new_path):
28         old_md5 = md5check(path)
29         new_md5 = md5check(new_path)
30         if old_md5 != new_md5:
31             shutil.copy(path, new_path)
32     else:
33         dirname = os.path.dirname(new_path)
34         if os.path.exists(dirname): # 若是目錄存在,直接複製文件到new_path
35             shutil.copy(path, new_path)
36         else: # 若是目錄不存在,則直接建立目錄並複製文件
37             try:
38                 os.makedirs(dirname)
39                 shutil.copy(path, new_path)
40             except WindowsError:
41                 print('建立目錄出錯')
42 
43 # 查找全部目錄文件的遞歸函數
44 def lsdir(folders):
45     path = os.listdir(folders)
46     for line in path:
47         line = folders + '/' + line
48         if(os.path.isdir(line)):
49             lsdir(line)
50         else:
51             copy(line)
52 
53 
54 55 56 
57 
58 
59 if __name__ == '__main__':
60     global old_source
61     global new_source
62     print('例子:d:/directory,請輸入要備份的目錄所在地址、以及目標地址:')
63     old_source = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
64     new_source = 'D:/leveldb' # 此處不知道只傳入盤符會發生什麼,建議不要這麼作,未經測試
65     lsdir(old_source)
66     

徹底備份測試

# -*- coding: utf-8 -*-
# 腳本功能:刪除new_path目錄,而後複製original_path到new_path目錄,注意兩目錄的名稱要同樣,初衷:用於名稱變化的須要備份的文件
# 基於python3

import os
import shutil

# 不校驗直接刪除已備份文件,再從新備份源文件
def non_checkout_backup(original_path, new_path):
    if os.path.exists(new_path):
        shutil.rmtree(new_path) # shutil.rmtree空目錄、有內容的目錄均可以刪,可是必需要存在,不然報錯, 而os.rmdir只能刪除空目錄
    shutil.copytree(original_path, new_path) # original_path、new_path都只能是目錄



if __name__ == '__main__':
    original_path = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
    new_path = 'D:/leveldb'
    non_checkout_backup(original_path, new_path)
相關文章
相關標籤/搜索