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