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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
python中for语句简单遍历数据的方法
May 07 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
python实现杨辉三角思路
Jul 14 Python
对python使用http、https代理的实例讲解
May 07 Python
Python切片索引用法示例
May 15 Python
pytorch permute维度转换方法
Dec 14 Python
python对Excel的读取的示例代码
Feb 14 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
Nov 17 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 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
解决GD中文乱码问题
2007/02/14 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
javascript 常用功能总结
2012/03/18 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
babel基本使用详解
2017/02/17 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
JavaScript实现百度搜索框效果
2020/03/26 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
python获取元素在数组中索引号的方法
2015/07/15 Python
python使用KNN算法手写体识别
2018/02/01 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
Python无损压缩图片的示例代码
2020/08/06 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python 如何调用远程接口
2020/09/11 Python
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
实习评语
2013/12/16 职场文书
保密普查工作实施方案
2014/02/25 职场文书
交通事故委托书范本
2014/09/28 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Python Django模型详解
2021/10/05 Python
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL