0
点赞
收藏
分享

微信扫一扫

Python 文件复制工具

文件复制工具,可以用于做文件备份。用于日常的更新部署

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

配置文件:

Python 文件复制工具_Python

举报

相关推荐

0 条评论