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中lambda的用法及其与def的区别解析
Jul 28 Python
Python中转换角度为弧度的radians()方法
May 18 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Django添加feeds功能的示例
Aug 07 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
python 实现多线程下载视频的代码
Nov 15 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
python pip如何手动安装二进制包
Sep 30 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 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
如何给phpadmin一个保护
2006/10/09 PHP
PHP常用处理静态操作类
2015/04/03 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
Jquery操作radio的简单实例
2014/01/06 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
小程序实现图片预览裁剪插件
2019/11/22 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python编程开发之日期操作实例分析
2015/11/13 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
python基于http下载视频或音频
2018/06/20 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
物流业务员岗位职责
2014/02/08 职场文书
置业顾问岗位职责
2014/03/02 职场文书
公司应聘自荐书
2014/06/14 职场文书
房屋转让协议书
2014/10/18 职场文书
老公保证书
2015/01/17 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
2015高考寄语集锦
2015/02/27 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript