文件复制工具,可以用于做文件备份。用于日常的更新部署
import os, shutil, time import configparser def main(): root_dir = os.path.split(os.path.realpath(__file__))[0]# 获取当前文件所在目录的上一级目录,即项目所在目录 configPath = os.path.join(root_dir, "config.txt") cf = configparser.ConfigParser() cf.read(configPath,"utf-8") # 拼接得到config.txt文件的路径,直接使用 # 数据库服务器信息 file_path = cf.get("Copy-Config", "file_path") # 源文件夹 target_path = cf.get("Copy-Config", "target_path") # 目标文件夹 # 挑选需要复制的文件 file_list = choose_file(file_path,target_path) # 复制文件 if len(file_list) > 0: copy_file(file_list,file_path,target_path) os.system('cls') print('\n操作完成~\n') isOpen() # 是否需要启动程序 def isOpen(): while True: menu = { "1": "进入程序", "2": "退出此程序", } for k, v in menu.items(): print(f"{k}、{v}") Your_input = input("请您选择:".strip()).upper() if Your_input == "1": main() elif Your_input == "2": print("欢迎您再次使用,再见~") sys.exit() else: print("请您选择(1/2)") #递归全文件复制 def copyAll(src, target,filter_folder): if os.path.isdir(src) and os.path.isdir(target): filelist = os.listdir(src) for file in filelist: # 判断是否为文件夹 path = os.path.join(src, file) if os.path.isdir(path): # 如果符合需要过滤的文件夹名,则跳过 if(file in filter_folder): continue path1 = os.path.join(target, file) if not os.path.isdir(path1): os.mkdir(path1) copyAll(path, path1,filter_folder) else: with open(path, 'rb') as rsteam: cotiner = rsteam.read() path = os.path.join(target, file) with open(path, 'wb') as wsteam: wsteam.write(cotiner) else: print('') def choose_file(path,target): """ 选择需要的文件 :param path:文件路径 :return:被选中的文件名 """ file_list = [] list_dir = os.listdir(path) for i in range(len(list_dir)): # 遍历目标文件夹下的所有文件 print('[{}]----{}\n'.format(i, list_dir[i])) menu = { "1": "通过序号选择指定文件", "2": "指定文件后缀", "3": "指定文件名前缀", "4": "全部文件" } for k, v in menu.items(): print(f"{k}、{v}") Your_input = input("请您选择:".strip()).upper() if Your_input == "1": # 输入序号选择需要的文件 file_code = input('请输入序号选择文件(分隔符“,”):').split(',') file_list = [list_dir[int(i)] for i in file_code] elif Your_input == "2": # 输入文件后缀选择需要的文件 file_type = input('请输入文件后缀(分隔符“,”):').split(',') for i in range(len(list_dir)): if os.path.splitext(list_dir[i])[-1][1:] in file_type: file_list.append(list_dir[i]) elif Your_input == "3": # 输入文件名前缀选择需要的文件 file_name = input('文件名前缀:') for i in range(len(list_dir)): if file_name in os.path.splitext(list_dir[i])[0]: file_list.append(list_dir[i]) elif Your_input == "4": filter_folder = [] isFilter = input('是否需要过滤指定文件夹:(Y/N)') if(isFilter.upper() == "Y"): filter_folder = input('请输入需要过滤的文件夹名(分隔符“,”):').split(',') # 复制全部文件 copyAll(path,target,filter_folder) return file_list def copy_file(file_list, source, target): """ 批量复制文件到指定目录 :param file_list: 需要复制的文件列表 :param source: 文件源目录 :param target: 目的地目录 """ os.chdir(source) for file in file_list: shutil.copy(file, target) # 复制文件到指定目录 print('复制成功, 文件夹中有{}个文件'.format(len(file_list))) print("#########################################\n") os.chdir(target) time.sleep(2) if __name__ == '__main__': # 检测文件目录 main()
配置文件: