python 文件批量处理(copy)示例

概述

       有时候需要批量处理文件该应用场景,在此做个笔录,方便后续查阅。此demo有批量处理并且修改各个文件名称

代码

# coding=utf-8
import os
import shutil

# 源文件夹路径
src_folder = r'D:\c_test1'
# 目标文件夹路径
dst_folder = r'D:\c_test2'

flag_var = True
dst_path_temp = ''

def FindFile(src_path):
    for each_file_name in os.listdir(src_path):
        fulldir = os.path.join(src_path, each_file_name)  # 拼接成绝对路径
        print(fulldir)  # 打印相关后缀的文件路径及名称
        if os.path.isfile(fulldir):  # 文件,匹配->打印
            # with open('D:/c_test1/test.txt', 'r', encoding='utf-8', errors='ignore') as file:
            with open(fulldir, 'r', errors='ignore') as file:
                # f = file.read()
                # print(f)  # 读取全部内容
                print('各个文件名称:' + each_file_name)
                src_fileName = os.path.join(os.path.abspath(src_path), fulldir)
                dst_fileName = os.path.join(os.path.abspath(dst_folder), each_file_name + '.txt')
                # print(src_fileName)
                # print(dst_fileName)
                # fs = os.rename(src_fileName, dst_fileName)
                # f.close()
            shutil.copy(fulldir, dst_fileName)

        if os.path.isdir(fulldir):  # 目录,递归
            FindFile(fulldir)


def copy_dir(src, dst):
    if not os.path.exists(src):
        return
    # 目标文件夹可能不存在,这个时候需要创建
    if not os.path.exists(dst):
        os.mkdir(dst)
    pathes = os.listdir(src)
    # print(pathes)
    for each_file_name in pathes:
        f_path = os.path.join(src, each_file_name)
        print('src_path' + f_path)
        # 目标路径作替换 src/haha.txt -> dst/haha.txt
        dst_path = f_path.replace(src, dst)
        print('dst_path' + dst_path)
        if os.path.isdir(f_path):
            # 目标目录按照源文件夹层级生成 src/heihei -> dst/heihei
            if not os.path.exists(dst_path):
                os.mkdir(dst_path)
            # 递归调用拷贝方法
            copy_dir(f_path, dst_path)
        else:
            with open(f_path, 'rb') as f:
                content = f.read()
                global flag_var #全局变量
                if flag_var:
                    # 记录原来路径
                    global dst_path_temp  # 全局变量
                    f_path_temp = f_path
                    dst_path_temp = dst_path
                    flag_var = False

                # 文件后缀追加.txt文件
                dst_fileName = os.path.join(os.path.abspath(dst), each_file_name + '.txt')
                f_path = os.path.join(src, dst_fileName)
                dst_path = f_path.replace(src, dst)
                # 目标替换路径
                with open(dst_path, 'wb') as wf:
                    ret = wf.write(content)
                    flag_var = True
                # 等待写完后,再去还原数据
                # if (ret):
                #     # 还原到原来文件格式 (去掉.txt后缀)
                #     os.rename(dst_path, dst_path_temp)


def rename_files(folder_path, old_ext, new_ext):
    if not os.path.exists(folder_path):
        return
    pathes = os.listdir(folder_path)
    # 获取各个文件夹下的所有文件名
    for filename in pathes:
        f_path = os.path.join(folder_path, filename)

        if os.path.isdir(f_path):
            rename_files(f_path, old_ext, new_ext)
        else:
            if filename.endswith(old_ext):
                # 构造新文件名
                new_filename = filename.replace(old_ext, new_ext)
                # 重命名文件
                old_file_path = os.path.join(folder_path, filename)
                new_file_path = os.path.join(folder_path, new_filename)
                os.rename(old_file_path, new_file_path)



if __name__ == '__main__':
    copy_dir(src_folder, dst_folder)
    # rename_files(dst_folder, ".txt", "")

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ch_champion

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

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

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

打赏作者

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

抵扣说明:

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

余额充值