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模块restful使用方法实例
Dec 10 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Python lambda函数基本用法实例分析
Mar 16 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
python opencv读mp4视频的实例
Dec 07 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
python利用7z批量解压rar的实现
Aug 07 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
浅析Python中字符串的intern机制
Oct 03 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/03 冲泡冲煮
php随机输出名人名言的代码
2012/10/07 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python能做什么
2020/06/02 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
交通志愿者活动总结
2014/06/27 职场文书
教师一帮一活动总结
2014/07/08 职场文书
创业计划书之网吧
2019/10/10 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python