Python多个嵌套文件夹内文件批量读取和生成(保留原本结构)

本文介绍如何使用Python编写代码,实现文件夹内文件的批量重命名和结构调整,保持原有路径关系,适合处理大量文件。通过实例展示了如何遍历文件夹,修改文件路径,并创建新目录结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情况:

经常遇到这种情况,需要批量处理文件夹内的文件,并且处理后的也要按原本的相对路径存放,如下图:在这里插入图片描述

解决思路

大概原理就是遍历一编最高级的文件夹,获取每个文件的路径(这里指与程序的相对路径),然后把原本最高级文件夹的名称替换为要保存的最高文件夹的名称,于此同时把原最高级文件夹下的子文件夹复制过去,防止保存文件时,找不到路径报错,如下:

.\第一级文件夹\第二级文件夹1\第二级文件夹1的文件.txt
            ↓
.\新_第一级文件夹\第二级文件夹1\第二级文件夹1的文件.txt

有了原文件和新生成文件的路径,创建和读取文件就很方便了。

代码

代码如下:

import re
import os

class TF:
    def __init__(self):
        #新最高级文件夹的名称
        self.NewFile = 'output'
        #原本最高级文件夹的名称
        self.OriginalFile = 'input'

    #遍历目录
    def TraverseDirs(self):
        #未检测到新最高级文件夹自动创建
        if not os.path.exists(".\\" + self.NewFile):
            os.makedirs(".\\" + self.NewFile)
        #未检测到要处理最高级文件夹自动创建,并提示
        if not os.path.exists(".\\" + self.OriginalFile):
            os.makedirs(".\\" + self.OriginalFile)
            print('未检测到' + self.OriginalFile + '文件夹,已经为你创建,请将需要操作文件放入,并重新打开软件')
            os.system('pause')
        #无异常开始遍历
        else:
            for root, dirs, files in os.walk('.\\' + self.OriginalFile):
                if len(dirs) != 0:
                    self.CopyDirs(dirs, root)#复制目录
                if len(files) != 0:
                    #遍历文件编辑
                    self.TraverseFiles(files, root)           
    #遍历文件
    def TraverseFiles(self, files, root):
        for name in files:
            #把文件名与路径拼接
            nameO = root + "\\" + name
            #并用新路径替换原路径生成
            #注:如果新文件与原来文件类型不一样,记得改后缀
            nameN = re.sub(self.OriginalFile, self.NewFile, nameO)
            #把两个路径导入给主函数
            self.main(nameO, nameN)
    #复制目录
    def CopyDirs(self, dirs, root):
        if not os.path.exists('.\\' + self.NewFile):
            os.makedirs('.\\' + self.NewFile)
        for D in dirs:
            root_n = re.sub(self.OriginalFile, self.NewFile, root)
            if not os.path.exists(root_n + '\\' + D):
                os.makedirs(root_n + '\\' + D)
    #主函数:这里就写了个简单的复制,根据自己需求改动就可以
    def main(self, input, output):
       print(input,'\n',output,'\n')
       f_input = open(input, 'rb')
       f_output = open(output, 'wb')

       t = f_input.read()
       f_output.write(t)

       f_input.close()
       f_output.close()

if __name__ == '__main__':
    TF().TraverseDirs()

我把两个路径输出来,更加直观的展示
生成后的文件的截图就不展示,跟原本就是一模一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Haicaji

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

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

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

打赏作者

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

抵扣说明:

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

余额充值