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
0
投稿
猜你喜欢
- 一、Tensorlow结构import tensorflow as tfimport numpy as np#创建数据x_data = np
- 【尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/7967225
- K近邻算法(或简称kNN)是易于理解和实现的算法,而且是你解决问题的强大工具。什么是kNNkNN算法的模型就是整个训练数据集。当需要对一个未
- 上次我重新修改了UBB的转换后,又很多朋友反映日文显示的时候出错了。我在本地测试了一下,结果出现了 Invalid procedure ca
- 用字符串就可以轻松地获取每一个文件的名称和扩展名,但不要乱用:<%Function getFilename(text)tex
- 结论概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚
- 1 将下面代码拷贝到一个文件,命名为asyncore.pyimport socketimport selectimport sysdef d
- 本文实例讲述了php指定长度分割字符串str_split函数用法。分享给大家供大家参考,具体如下:示例1:$str = 'abcde
- 使用PyQt5开发图形界面,里面使用日期框,这里把这个QDateEdit组件命名为:beginDatefrom PyQt5.QtCore i
- 本文实例为大家分享了python实现单链表反转的具体代码,供大家参考,具体内容如下代码如下:class Node(object): 
- 本文实例讲述了Python将阿拉伯数字转换为罗马数字的方法。分享给大家供大家参考。具体实现方法如下:def numToRomanNum(Nu
- 前言在两种python循环语句的使用中,不仅仅是循环条件达到才能跳出循环体。所以,在对python函数进行阐述之前,先对跳出循环的简单语句块
- 功能很简单,代码也很简洁,这里就不多废话了。package mainimport ( "fmt
- 本文实例讲述了Python微信推送模板消息功能。分享给大家供大家参考,具体如下:官方文档:https://mp.weixin.qq.com/
- 本文实例讲述了Python异常模块traceback用法。分享给大家供大家参考,具体如下:traceback模块被用来跟踪异常返回信息. 如
- 1.cv2.threshold()参数说明cv2.threshold(src, thresh, maxval, type[, dst]) &
- 这个仿msn的右下角popup提示窗口效果很久以前收集的,现在整理出来给大家分享,需要的朋友可以拿去用,特点,提示窗口内容和js代码分离容易
- Model中分别提供了filter方法和icontains方法实现简单的搜索功能。html页面中实现搜索框模板api_test_manage
- 0 引言前段时间找到了一个免费的天气预报API,费了好段时间把这个API解析并组装成自己想用的格式了,就想着如何实现每天发送天气信息给自己。
- 对于字典的操作,本篇介绍的是在其中添加值的方法,下面带来详细的介绍。1、通过键=值的方式进行添加。如果键存在,则会将旧的值进行覆盖,如果不存