Python就業班——初識面向對象——練習——backup_file

  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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章