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常见文件操作的函数示例代码
Nov 15 Python
wxpython学习笔记(推荐查看)
Jun 09 Python
零基础写python爬虫之打包生成exe文件
Nov 06 Python
收藏整理的一些Python常用方法和技巧
May 18 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Django 连接sql server数据库的方法
Jun 30 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python中的反斜杠问题深入讲解
Aug 12 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 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
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
django框架cookie和session用法实例详解
2019/12/10 Python
python实现一个猜拳游戏
2020/04/05 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
财务科科长岗位职责
2014/03/10 职场文书
小学教师评语大全
2014/04/23 职场文书
初中家长意见
2015/06/03 职场文书
教师节随笔
2015/08/15 职场文书
导游词之日本富士山
2020/01/06 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
Python语言规范之Pylint的详细用法
2021/06/24 Python