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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
python字符串连接方式汇总
Aug 21 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
Python3批量创建Crowd用户并分配组
May 20 Python
Django中F函数的使用示例代码详解
Jul 06 Python
如何在python中判断变量的类型
Jul 29 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
python math模块的基本使用教程
Jan 16 Python
Python实现日志实时监测的示例详解
Apr 06 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自动适应范围的分页代码
2008/08/05 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
destoon各类调用汇总
2014/06/20 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
python中使用print输出中文的方法
2018/07/16 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
法院实习人员自我鉴定
2013/09/26 职场文书
超市业务员岗位职责
2013/12/05 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
分居协议书范本
2014/11/03 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python