当前位置: 首页 > 编程笔记 >

python脚本替换指定行实现步骤

董琦
2023-03-14
本文向大家介绍python脚本替换指定行实现步骤,包括了python脚本替换指定行实现步骤的使用技巧和注意事项,需要的朋友参考一下

 python脚本替换指定行实现步骤

       本文主要介绍了Python的脚本替换,由于工作的需要,必须对日志系统进行更新,这里在网上搜索到一篇文章比较不错,这里记录下,大家可以参考下,

工作中需要迁移代码,并把原来的日志系统更新到现在的格式,原来获取log的格式是

AuctionPoolLoggerUtil.getLogger() 

现在获取log的格式是:

LoggerFactory.getLogger(XXXXX.class) 

这里的XXXXX需要替换为当前的类名。如果这样的java文件不多还好,可以一个个人肉替换。一旦这样的文件很多,特别是迁移过来大量的文件时,你就会发现简直是一场灾难。其实我们发现上面的工作很多是机械单调的。ide中的替换功能不能做到的是把XXXXX替换成当前的类名。而python很容易处理文本,利用正则表达式可以比较方便的拿到类名,然后替换掉xxxxx就可以了。

实现代码:

import fileinput 
import os 
import re 
 
__author__ = 'ykdsg' 
 
packDir='/Users/ykdsg/svn_workspace/auctionplatform/misc_refactory/auctionplatform/ap-biz/src/main/java/com/yk/misccenter' 
#查找class name 
findClassNameP=re.compile(r"(?<=class\s)\w*") 
findXP=re.compile(r"XXXXX") 
 
 
def processDirectory(args,dirname,filenames): 
  # print 'Directory',dirname 
  for filename in filenames: 
 
    if os.path.splitext(filename)[1]=='.java': 
      # print 'file',filename 
      fullFileUrl=dirname+ "/"+filename 
      fileObj=open(fullFileUrl) 
      className='' 
      # Optional in-place filtering: if the keyword argument inplace=1 is passed to fileinput.input() or to 
      # the FileInput constructor, the file is moved to a backup file and standard output is directed to the 
      # input file (if a file of the same name as the backup file already exists, it will be replaced silently) 
      # . This makes it possible to write a filter that rewrites its input file in place. If the backup 
      # parameter is given (typically as backup='.<some extension>'), it specifies the extension for the 
      # backup file, and the backup file remains around; by default, the extension is '.bak' and it is deleted 
      # when the output file is closed. In-place filtering is disabled when standard input is read. 
      for line in fileinput.input(fullFileUrl, inplace=1): 
        matchClass = findClassNameP.search(line) 
        if matchClass: 
          className = matchClass.group() 
        matchX=findXP.search(line) 
        if matchX: 
          #print 后面需要有, 否则会出现多余的空行 
          print line.replace('XXXXX',className), 
        else: 
          print line, 
 
 
def search(): 
  os.path.walk(packDir,processDirectory,None) 
 
if __name__ == '__main__': 
  search() 

上面的脚本中大部分是fileinput.input的注释,就是说了inplace=1其实就是把源文件的内容放到缓存区,然后直接将内容写入源文件

findClassNameP 是查找class name的正则表达式,上面的逻辑就是对文件逐行分析,拿到class name。然后再分析当前行是否有xxxxx,有的话就用class name 替换,没有的话就原行输出。

       以上使用对python脚本替换指定行的简单实例,如果大家有疑问或者更好的方法可以留言讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 问题内容: 我正在寻找一种通过Shell脚本搜索和替换多行的方法。这就是我想要做的: 简而言之,我想删除注释及其之间的所有内容,并替换为一些新内容。基本上,我想在多行代码上执行一个简单的sed命令,并且如果可能的话,仅使用一些基本的* nix工具,而无需其他脚本语言。 问题答案: 如果您只需要匹配完整的行,则可以使用来完成此任务 。就像是: 如果文件格式不正确,并且注释与要保留或删除的文本在同一行

  • 本文向大家介绍Shell脚本实现监视指定进程的运行状态,包括了Shell脚本实现监视指定进程的运行状态的使用技巧和注意事项,需要的朋友参考一下 在之前的博客中,曾经写了自动化测试程序的实现方法,现在开发者需要知道被测试的进程(在此指运行在LINUX上的主进程的)在异常退出之前的进程的运行状态,例如内存的使用率、CPU的使用率等。 现用shell脚本实现指定进程的运行状态。直接上代码。 样实现了每1

  • 本文向大家介绍linux下实现定时执行php脚本,包括了linux下实现定时执行php脚本的使用技巧和注意事项,需要的朋友参考一下 在linux中输入命令 然后使用vim的命令编辑打开的文件,输入 保存,退出,好了,现在系统会在每个0点自动执行update.php脚本,脚本中可以编写数据库执行,自动发邮件等功能。 注:直接写成 0 * * * * php -f /home/userxxx/upda

  • 问题内容: 我将如何在angularjs中创建一个指令,例如采用以下元素: 并将其转换为此 我已经编写了用于自动链接函数中的文本并返回html的功能(让我们将函数称为“ autoLink”),但是我对指令不满意。 我还想向元素添加属性,以将对象传递给指令。例如 其中link.props是{a:’bla bla’,b:’waa waa’}之类的对象,该对象将作为第二个参数传递给autoLink函数(

  • 问题内容: 我今天才开始学习Python。我一直在阅读Byte Python。现在,我有一个涉及时间的Python项目。我在Byte of Python中找不到任何与时间有关的东西,所以我问你: 如何在用户指定的时间内运行块然后中断? 例如(用一些伪代码): 甚至更好: 问题答案: 我建议生成另一个线程,使其成为守护程序线程,然后休眠直到您希望任务终止。例如: 当所有非守护程序线程都退出时,Pyt

  • 本文向大家介绍python实现淘宝秒杀脚本,包括了python实现淘宝秒杀脚本的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现淘宝秒杀脚本的具体代码,供大家参考,具体内容如下 1.安装pycharm。网上教程很多。 2.安装 Selenium 库。 Selenium支持很多浏览器,我选择的是Firefox浏览器。 因为我这里是Python3环境,自带的又pip,所以安