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 18 Python
python连接mysql实例分享
Oct 09 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
django框架如何集成celery进行开发
May 24 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
python3 pygame实现接小球游戏
May 14 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
python实现商品进销存管理系统
May 30 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
apache rewrite_module模块使用教程
2008/01/10 PHP
php 动态添加记录
2009/03/10 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
PDO::query讲解
2019/01/29 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
简单了解python的内存管理机制
2019/07/08 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Python简单实现区域生长方式
2020/01/16 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
python 逐步回归算法
2021/04/06 Python
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL