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排序方法实例分析
Apr 30 Python
python超简单解决约瑟夫环问题
May 12 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
Python实现的多进程和多线程功能示例
May 29 Python
python读取xlsx的方法
Dec 25 Python
使用Python实现跳帧截取视频帧
May 31 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
Python批量将图片灰度化的实现代码
Apr 11 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
python如何删除文件、目录
Jun 23 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 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
调频问题解答
2021/03/01 无线电
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
javascript中常用编程知识
2013/04/08 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
js笔试题-接收get请求参数
2019/06/15 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
深入理解Python装饰器
2016/07/27 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
用python实现学生管理系统
2020/07/24 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
英文自荐信常用句子
2014/03/26 职场文书
出纳担保书范文
2014/04/02 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python