python批量替换多文件字符串问题详解


Posted in Python onApril 22, 2018

系统如下:

操作系统 : CentOS7.3.1611_x64

Python 版本 : 2.7.5

问题描述

编码过程中有时候会遇到在多个源文件中存在同一个变量名(比如 : writeBuffer),需要替换为新的变量名(比如 : write_buffer)的问题。 怎么能方便快捷的解决该问题呢?

解决方案

使用sed

sed和grep结合使用可以替换当前文件夹多个文件的内容。

格式 :

sed -i 's/原字符串/新字符串/g' `grep  -rl 原字符串 所在目录`

示例代码:

sed -i 's/writeBuffer/write_buffer/g' `grep -rl writeBuffer  ./*`

使用Python

使用Python脚本可以实现替换当前文件夹多个文件的内容。

替换单个文件的代码如下:

def doReplace(fpath,src,dst):
 newConent,bFlag = "",False
 with open(fpath,"rb") as fin:
 for line in fin :
  if line.find(src) == -1 :
  newLine = line
  else:
  bFlag = True
  newLine = line.replace(src,dst)
  newConent += newLine
 if not bFlag : return None
 print fpath
 with open(fpath,"wb") as fout:
 fout.write(newConent)
 return None

替换多个文件仅需添加目录遍历代码。

完整示例代码如下:

#! /usr/bin/python
#-*- coding: utf-8 -*- 

import os,sys

def doReplace(fpath,src,dst):
 newConent,bFlag = "",False
 with open(fpath,"rb") as fin:
 for line in fin :
  #if len(line.strip()) == 0 : continue
  if line.find(src) == -1 :
  newLine = line
  else:
  bFlag = True
  newLine = line.replace(src,dst)
  newConent += newLine
 if not bFlag : return None
 print fpath
 with open(fpath,"wb") as fout:
 fout.write(newConent)
 return None

def replaceMain(dirName,src,dst):
 for root, dirs, files in os.walk(dirName):
 for name in files:
  fpath = os.path.join(root, name)
  doReplace(fpath,src,dst)
 return None

if __name__ == "__main__":
 if len(sys.argv) < 3 :
 print "usage : replaceMulti srcStr dstStr"
 print "replace current dir files"
 sys.exit(1)
 srcStr = sys.argv[1]
 dstStr = sys.argv[2]
 dirName = "."
 dirName = os.path.realpath(dirName)
 print "working dir :",dirName
 replaceMain(dirName,srcStr,dstStr)

添加可执行权限:

chmod a+x replaceMulti.py

使用示例:

./replaceMulti.py writeBuffer write_buffer

将当前文件夹中所有 writeBuffer 替换为 write_buffer

也可以将 replaceMulti.py 放入 /usr/local/bin/ 目录:

[root@local ~]# mv replaceMulti.py /usr/local/bin/
[root@local ~]# replaceMulti.py
usage : replaceMulti srcStr dstStr
replace current dir files
[root@local ~]#

该脚本在windows下也可以使用,将 replaceMulti.py 所在目录加入环境变量即可。

好,就这些了,希望对你有帮助。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
opencv python 傅里叶变换的使用
Jul 21 Python
Python利用递归实现文件的复制方法
Oct 27 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
python list转置和前后反转的例子
Aug 26 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 #Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 #Python
Python解决八皇后问题示例
Apr 22 #Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 #Python
对python中raw_input()和input()的用法详解
Apr 22 #Python
对Python3中的input函数详解
Apr 22 #Python
Python实现中一次读取多个值的方法
Apr 22 #Python
You might like
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
详解React 16 中的异常处理
2017/07/28 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Django--权限Permissions的例子
2019/08/28 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
python 基于wx实现音乐播放
2020/11/24 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
小学毕业典礼主持词
2014/03/27 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
学习保证书怎么写
2015/02/26 职场文书
孔子观后感
2015/06/08 职场文书
工商局调档介绍信
2015/10/22 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
Python 数据可视化之Bokeh详解
2021/11/02 Python
Mybatis是这样防止sql注入的
2021/12/06 Java/Android