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实现的一个简单LRU cache
Sep 26 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
python三大神器之fabric使用教程
Jun 10 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
Python flask框架post接口调用示例
Jul 03 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
django restframework serializer 增加自定义字段操作
Jul 15 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 in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python 变量类型详解
2018/10/10 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Python中SQLite如何使用
2020/05/27 Python
Python字典实现伪切片功能
2020/10/28 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
大四学年自我鉴定
2013/11/13 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
严以用权学习心得体会
2016/01/12 职场文书
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL