1 #!/usr/bin/env python3 2 # coding=utf-8 3 # Version:python3.6.1 4 # Project:practice 5 # File:backup_file.py 6 # Data:2020/7/17 19:04 7 # Author:LGSP_Harold 8 import os 9 10 11 class FileBackup(object): 12 """ 13 文本文件備份 14 """ 15 16 def __init__(self, src, dist): 17 """ 18 構造方法 19 :param src: 目錄,需要備份的文件目錄 20 :param dist: 目錄,備份後的目錄 21 """ 22 self.src = src 23 self.dist = dist 24 25 def read_files(self): 26 """ 27 讀取src目錄下的所有文件 28 :return: 29 """ 30 ls = os.listdir(self.src) 31 print(ls) 32 for l in ls: 33 # 循環處理每一個文件/文件夾 34 # self.backup_file(l) 35 self.backup_file2(l) 36 37 def backup_file(self, file_name): 38 """ 39 處理備份 40 :param file_name: 文件/文件夾的名稱 41 :return: 42 """ 43 # 1、判斷dist是否存在,如果不存在,要創建這個目錄 44 if not os.path.exists(self.dist): 45 os.makedirs(self.dist) 46 print('指定的目錄不存在,創建完成!') 47 # 2、判斷文件是否爲我們要備份的文件 48 49 # 拼接文件的完整路徑 50 full_src_path = os.path.join(self.src, file_name) 51 full_dist_path = os.path.join(self.dist, file_name) 52 # 首先判斷是否爲文件夾,然後藉助於文件的後綴名進行判斷 53 if os.path.isfile(full_src_path) and os.path.splitext(full_src_path)[-1].lower() == '.txt': 54 print(full_src_path) 55 # 3.1寫入備份內容 56 with open(full_dist_path, 'w', encoding='utf-8') as f_dist: 57 print('>>>開始備份【{0}】'.format(file_name)) 58 # 3、讀取文件內容 59 with open(full_src_path, 'r', encoding='utf-8') as f_src: 60 while True: 61 rest = f_src.read(100) 62 if not rest: 63 break 64 # 4、把讀取的內容寫入到新的文件中 65 f_dist.write(rest) 66 f_dist.flush() 67 print('>>>【{0}】備份完成'.format(file_name)) 68 else: 69 print('文件類型不符合備份要求,跳過>>') 70 71 def backup_file2(self, file_name): 72 """ 73 處理備份優化版本 74 :param file_name: 文件/文件夾的名稱 75 :return: 76 """ 77 # 1、判斷dist是否存在,如果不存在,要創建這個目錄 78 if not os.path.exists(self.dist): 79 os.makedirs(self.dist) 80 print('指定的目錄不存在,創建完成!') 81 # 2、判斷文件是否爲我們要備份的文件 82 83 # 拼接文件的完整路徑 84 full_src_path = os.path.join(self.src, file_name) 85 full_dist_path = os.path.join(self.dist, file_name) 86 # 首先判斷是否爲文件夾,然後藉助於文件的後綴名進行判斷 87 if os.path.isfile(full_src_path) and os.path.splitext(full_src_path)[-1].lower() == '.txt': 88 print(full_src_path) 89 # 3.1寫入備份內容 90 with open(full_dist_path, 'w', encoding='utf-8') as f_dist, \ 91 open(full_src_path, 'r', encoding='utf-8') as f_src: 92 print('>>>開始備份【{0}】'.format(file_name)) 93 # 3、讀取文件內容 94 while True: 95 rest = f_src.read(100) 96 if not rest: 97 break 98 # 4、把讀取的內容寫入到新的文件中 99 f_dist.write(rest) 100 f_dist.flush() 101 print('>>>【{0}】備份完成'.format(file_name)) 102 else: 103 print('文件類型不符合備份要求,跳過>>') 104 105 106 if __name__ == '__main__': 107 # 要備份的文件目錄地址 108 base_path = os.path.dirname(os.path.abspath(__file__)) 109 # os.path.abspath(__file__) 獲得帶絕對路徑的當前文件 110 # os.path.dirname(os.path.abspath(__file__)) 獲得當前文件的絕對路徑 111 src_path = os.path.join(base_path, 'src') 112 print(src_path) 113 # 備份後的目錄地址 114 dist_path = os.path.join(base_path, 'dist') 115 print(dist_path) 116 bak = FileBackup(src_path, dist_path) 117 bak.read_files()