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

配置文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仅此而已丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值