[python]一个遍历多层文件夹,然后替换文件内容和目录名称的案例
假如有如下目录结构:
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]一个遍历多层文件夹,然后替换文件内容和目录名称的案例相关推荐
- 使用Python设计一个自动查询文件夹的exe文件
使用Python设计一个自动查询文件夹的exe文件 文章目录 使用Python设计一个自动查询文件夹的exe文件 前言 一.消灭噩梦(~~摸鱼~~ )的开始 二.~~摸鱼~~ 效果升级--添加拷贝功能 ...
- python批量删除文件1001python批量删除文件_Python实现递归遍历文件夹并删除文件...
思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...
- python递归遍历目录_Python实现递归遍历文件夹并删除文件
思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...
- python根据文件名或后缀名遍历文件夹下所有文件或图片的路径,并计算文件行数
python遍历文件夹下所有文件或图片的路径 代码 指定目录下的指定后缀文件 import glob #获取指定目录下的所有图片 print (glob.glob("\\home\\qiao ...
- python 怎么拷贝一个文件到一个新的文件_Python脚本提取不同文件夹里面的文件到一个新的文件...
这条博客分享一个脚本,实现将不同文件夹的我们需要的文件提取到一个新的文件下.如: 这是原来文件下的文件,我将它重新命名,然后复制到下图的文件夹下,实现将很多不同文件夹下很多我们想要的文件提取出来,省的 ...
- python 遍历,删除,复制文件夹下所有文件
import osdef files_and_dirs_list(dir_path):"""遍历文件夹及文件夹下所有文件(包括文件夹):param dir_path: 文 ...
- python生成多级文件夹_利用 python 遍历多级文件夹处理不同文件
需求:近期,同事在处理文件的时候,常常需要从一堆文件中提取一些数据信息: 分析:由于每个文件夹下面的文件或文件夹多如牛毛,文件类型也很多种,需要针对不同文件类型做处理,人工处理是不现实的,只能用脚本处 ...
- python编写代码实现文件的拷贝功能_python从一个文件夹自动拷贝文件到目标文件夹的代码...
这里为大家提供一个python操作文件的例子,实现功能:从一个文件夹自动拷贝文件到目标文件夹. 供python爱好者学习参考. 代码如下: # Filename: CopyPictures.py im ...
- python 打开文件夹所有文件_python遍历文件夹下所有文件
python遍历文件夹下所有文件的方法:首先打开相应的代码文件:然后通过"for f in files:print(os.path.join(root, f))"方式遍历所有的文件 ...
最新文章
- 安卓开发小知识 - 3
- php mysql 多行查找_PHP使用mysqli同时执行多条sql查询语句的实例
- LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
- Linux上安装Bugfree系统
- 数据库相关的论文笔记
- boundingBox getContentSize
- 知识图谱常用指标:MRR、Hits@1、Hits@10、MR
- java生成实体类的工具内部是如何实现的(mysql)
- 基于SpringBoot,来实现MySQL读写分离技术
- matlab编写全置信度函数,Matlab_curve_fitting_tool的用法图文结合
- 20172307 2017-2018-2 《程序设计与数据结构》第7周学习总结
- npp夜光数据介绍 viirs_基于NPP-VIIRS夜间灯光数据的南宁市GDP空间化研究
- 数据建模讲解和案例分析
- 国家网络信息安全战略三步曲
- Riverbed助力Interplex成功使用机器人技术
- 关于浏览器被hao123劫持
- Mybatis如果存在该条数据则修改,否则新增
- 使用IntelliJ IDEA 配置Maven(入门)
- 深度学习为图片人物换装【python代码教程】 1
- Codeforces707C