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人人网登录应用实例
Sep 26 Python
python友情链接检查方法
Jul 08 Python
Python实现SVN的目录周期性备份实例
Jul 17 Python
用python实现k近邻算法的示例代码
Sep 06 Python
解决Python一行输出不显示的问题
Dec 03 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
Python中断多重循环的几种方式详解
Feb 10 Python
Python工程师必考的6个经典面试题
Jun 28 Python
使用Python解决图表与画布的间距问题
Apr 11 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的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
让python json encode datetime类型
2010/12/28 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
Python简单实现区域生长方式
2020/01/16 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
公务员的自我鉴定
2013/10/26 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
经销商年会策划方案
2014/05/29 职场文书
影子教师研修方案
2014/06/14 职场文书
安全标兵事迹材料
2014/08/17 职场文书
个人剖析材料范文
2014/09/30 职场文书
教师工作总结范文2014
2014/11/10 职场文书
可怜妈妈观后感
2015/06/09 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis