python批量替换多文件字符串问题详解
作者:Mike_Zhang 发布时间:2023-05-08 23:48:06
标签:python,批量替换,字符串
系统如下:
操作系统 : 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 所在目录加入环境变量即可。
好,就这些了,希望对你有帮助。
来源:http://www.cnblogs.com/MikeZhang/p/replaceMulti20180421.html


猜你喜欢
- Python requests 模块requests 模块是我们使用的 python爬虫 模块 可以完成市场进80%的爬虫需求。安装pip
- 昨天用ucweb看到了goos发的一篇帖子:谁说Float菜单不可以水平居中,进去看了看,觉得方法有点繁琐了,用到了负边距,position
- cgo 使得在 Golang 中可以使用 C 代码。Hello World为了有一个较为直观的了解,我们来看一个简单的例子,创建文件 mai
- 前言在c++中参数传递有两种形式:值传递和引用传递。这两种方式的区别我不在此说,自行补上,如果你不知道的话。我先上python代码,看完我们
- 我们有下面一张PDF格式存储的表格,现在需要使用Python将它提取出来。使用Python提取表格数据需要使用pdfplumber模块,打开
- 安装好jupyter notebook后,在pycharm中无论运行什么样的python脚本,都会默认使用python的console运行,
- 一个日历控件,这是官方说明,,供大家参考,具体内容如下首先引入css样式<!--引入bootstrap 和bootstrap-date
- 问题查询了很多网上的文章,连接远程服务器调试基本上都是本地复制一个代码文件夹调试好后再部署到服务器上,这就很麻烦,(作为一个懒人)我想直接打
- 概述我在教学和实际设计中的一些心得。就不长篇大论了!让大家省些时间,捞干的。尽量通俗易懂。想知道怎样设计标志,就要知道什么是标志?标志:外来
- 1、首先停止mysql服务管理员身份开启CMD下命令关闭或者windows服务页面关闭C:\Users\xxx>net stop my
- Celery是一个异步的任务队列(也叫做分布式任务队列),一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需
- 前言由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示
- 1.介绍 现在的网站随着访问量的增加,单一服务器无法承担巨大的访问量,有没有什么方便快捷的方式解决这个问题呢,答案是”有”!比如建立服务器群
- 本地路径的创建在做下载操作时,我们一般先把文件下载到本地指定的路径下,然后再做其他使用。为了防止程序出现异常,我们通常需要先判断本地是否存在
- 本文实例汇总了python求列表交集的方法。分享给大家供大家参考。具体方法如下:交集对于给定的两个集合A 和 集合B 的交集是指含有所有既属
- SQL1: --1、查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (102
- 当然有,看看下面,你就会明白:<%Sub TimeDelaySeconds(Delay
- 最小生成树的Prim算法也是贪心算法的一大经典应用。Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树。Prim算法过程
- 前言在github中经常可以看到下面的日历图,可以用来表示每一天在github上的活跃程度。类似的方法也可以用到空气质量的可视化方式中来,只
- 通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码