假如有如下目录结构:
      root
        first
            a.txt
            b.txt
        second
            c.txt
            d.txt
        third
            first
                a.txt
            second
需要把所有文件中的变量 ${txt_date} 替换为 ${start_date},把所有名称为first的目录改为one、second的目录改为two

代码:

import os,time,configparser,sys,getopt
dirHome='app_'
'''解析参数文件'''
def parseCofig(configFile):try:global contentPairsglobal dirPairsif (os.path.exists(configFile) and os.path.isfile(configFile)) :cf = configparser.RawConfigParser()cf.optionxform = lambda option: optioncf.read(configFile)contentPairs = cf.items('file')dirPairs = cf.items('dir')return 0;else:writeLog("ERROR", "config file [" + configFile + "] not exists!")exit(1)except Exception as e:writeLog("ERROR", str(e))exit(1)#打印日志
def writeLog(logtype, msg):print("[{:5}][{}] {}".format(logtype, time.strftime("%Y-%m-%d %H:%M:%S"), msg))return'''遍历文件夹'''
def walkFile(file):try:if os.path.isdir(file):for root, dirs, files in os.walk(file):writeLog("INFO", "scan directory [" + root + "]")if(len(files)==0 and len(dirs)==0):writeLog("WARN", "directory [" + root + "] is null!")handleFile(root)else:for f in files:handleFile(os.path.join(root, f))else:handleFile(file)except Exception as e:writeLog("ERROR", str(e))exit(1)def handleFile(file):target = replacePath(file)dir=''if(os.path.isfile(os.path.abspath(file))):dir = os.path.dirname(os.path.abspath(target))else:dir = os.path.abspath(target)#创建目录if(os.path.exists(dir) and os.path.isdir(dir)):{#writeLog("WARN", "directory [" + dir + "] already exists!")}else:{ os.mkdir(dir) }#替换文件变量if (os.path.isfile(file)):str = replaceContent(file)writeLog("INFO", "write [" + os.path.abspath(file) + "] to ["+os.path.abspath(target)+"]")with open(target, 'w', encoding='utf-8') as f:f.write(str)def replaceContent(file):writeLog("INFO", "replace file content,fileName[" + file + "]")with open(file, 'r', encoding='utf-8') as f:str = f.read()for p in contentPairs:if len(p) == 2:str = str.replace(p[0], p[1])return strreturn Nonedef replacePath(filePath):newFilePath=''for p in dirPairs:if len(p) == 2:newFilePath = dirHome+filePath.replace(p[0], p[1])if(filePath!=newFilePath):writeLog("INFO", "replace file directory [" + filePath + "] to "+"["+newFilePath+"]")return newFilePathdef main():argArr=sys.argvif(len(argArr)<=1):parseCofig("parm.txt")walkFile("root")elif(len(argArr)==2):parseCofig("parm.txt")walkFile(argArr[1])elif(len(argArr)==3):parseCofig(argArr[1])walkFile(argArr[2])else:writeLog("ERROR", "arg error!")main();

把以上代码文件放入和root目录相同的目录中

在和root目录相同的目录中编辑一个参数文件parm.txt,内容为:

[file]
${txt_date}=${start_date}
[dir]
first=one
second=two

[python]一个遍历多层文件夹,然后替换文件内容和目录名称的案例相关推荐

  1. 使用Python设计一个自动查询文件夹的exe文件

    使用Python设计一个自动查询文件夹的exe文件 文章目录 使用Python设计一个自动查询文件夹的exe文件 前言 一.消灭噩梦(~~摸鱼~~ )的开始 二.~~摸鱼~~ 效果升级--添加拷贝功能 ...

  2. python批量删除文件1001python批量删除文件_Python实现递归遍历文件夹并删除文件...

    思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...

  3. python递归遍历目录_Python实现递归遍历文件夹并删除文件

    思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...

  4. python根据文件名或后缀名遍历文件夹下所有文件或图片的路径,并计算文件行数

    python遍历文件夹下所有文件或图片的路径 代码 指定目录下的指定后缀文件 import glob #获取指定目录下的所有图片 print (glob.glob("\\home\\qiao ...

  5. python 怎么拷贝一个文件到一个新的文件_Python脚本提取不同文件夹里面的文件到一个新的文件...

    这条博客分享一个脚本,实现将不同文件夹的我们需要的文件提取到一个新的文件下.如: 这是原来文件下的文件,我将它重新命名,然后复制到下图的文件夹下,实现将很多不同文件夹下很多我们想要的文件提取出来,省的 ...

  6. python 遍历,删除,复制文件夹下所有文件

    import osdef files_and_dirs_list(dir_path):"""遍历文件夹及文件夹下所有文件(包括文件夹):param dir_path: 文 ...

  7. python生成多级文件夹_利用 python 遍历多级文件夹处理不同文件

    需求:近期,同事在处理文件的时候,常常需要从一堆文件中提取一些数据信息: 分析:由于每个文件夹下面的文件或文件夹多如牛毛,文件类型也很多种,需要针对不同文件类型做处理,人工处理是不现实的,只能用脚本处 ...

  8. python编写代码实现文件的拷贝功能_python从一个文件夹自动拷贝文件到目标文件夹的代码...

    这里为大家提供一个python操作文件的例子,实现功能:从一个文件夹自动拷贝文件到目标文件夹. 供python爱好者学习参考. 代码如下: # Filename: CopyPictures.py im ...

  9. python 打开文件夹所有文件_python遍历文件夹下所有文件

    python遍历文件夹下所有文件的方法:首先打开相应的代码文件:然后通过"for f in files:print(os.path.join(root, f))"方式遍历所有的文件 ...

最新文章

  1. 安卓开发小知识 - 3
  2. php mysql 多行查找_PHP使用mysqli同时执行多条sql查询语句的实例
  3. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
  4. Linux上安装Bugfree系统
  5. 数据库相关的论文笔记
  6. boundingBox getContentSize
  7. 知识图谱常用指标:MRR、Hits@1、Hits@10、MR
  8. java生成实体类的工具内部是如何实现的(mysql)
  9. 基于SpringBoot,来实现MySQL读写分离技术
  10. matlab编写全置信度函数,Matlab_curve_fitting_tool的用法图文结合
  11. 20172307 2017-2018-2 《程序设计与数据结构》第7周学习总结
  12. npp夜光数据介绍 viirs_基于NPP-VIIRS夜间灯光数据的南宁市GDP空间化研究
  13. 数据建模讲解和案例分析
  14. 国家网络信息安全战略三步曲
  15. Riverbed助力Interplex成功使用机器人技术
  16. 关于浏览器被hao123劫持
  17. Mybatis如果存在该条数据则修改,否则新增
  18. 使用IntelliJ IDEA 配置Maven(入门)
  19. 深度学习为图片人物换装【python代码教程】 1
  20. Codeforces707C

热门文章

  1. 通过Telnet查询注册服务
  2. 无传感FOC控制中的转子位置和速度确定方法一
  3. SpringMVC 上传图片保存到服务器 同时更改图片名称保存至数据库
  4. SSH Backgroup工具汇总
  5. OpenMP模式下多线程文件操作 (转)
  6. 字符串加密解密函数 (C#) (转)
  7. Linux 基金会成立持续交付基金会
  8. 准备接入个人支付接口?看完这几款支付产品再做决定!
  9. 采用HTML5之“data
  10. oracle视图建主键