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脚本替换指定行的简单实例,如果大家有疑问或者更好的方法可以留言讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 详解python脚本自动生成需要文件实例代码

    python脚本自动生成需要文件 在工作中我们经常需要通过一个文件写出另外一个文件,然而既然是对应关系肯定可以总结规律让计算机帮我们完成,今天我们就通过一个通用文件生成的python脚本来实现这个功能,将大家从每日重复的劳动中解放! 定义一个函数 def produceBnf(infilename,outfilename): List=[] with open(infilename,'r') as inf: for line in inf.readlines(): List.append(re.

  • Python实现脚本锁功能(同时只能执行一个脚本)

    1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding=utf-8 # # 文件锁脚本测试 # import os #操作系统 import time lockfilepath = "/opt/lock.txt"; #判断文件是否存在 if os.path.exists(lockfilepath): #文件存在,说明脚本正在执行 print(&

  • 使用Python脚本和ADB命令实现卸载App

    前言 本文实现一个 Python 脚本,用来批量卸载模拟器或者实体机上面的 App 以及清除 LogCat 缓存. 开发 Android 的朋友,模拟器或者手机里面常常有大量调试的 Demo,对于手机来说还好,可是对于模拟器,有可能就会造成调试速度以及启动速度的下降.而且模拟器中 App 一个一个删除也是很麻烦.利用 ADB 命令,我们可以做很多事,其中就包括批量操作模拟器或者手机上的 App.当然包括删除操作啦.利用 Python 脚本和 ADB shell 命令以及 AS 自带的 CMD 窗

  • Python实现一个转存纯真IP数据库的脚本分享

    前言 之前写过很多关于扫描脚本的文章,一直都没写自己的扫描IP段是哪里搞来的,也会有朋友经常来问一些扫描经验,说实话我觉得这个工具并没有实际的技术含量,但是能提高工作效率,就共享出来给大家耍耍- 谈到扫描经验,我个人通常都会针对不同的设备,不同的应用选择不同类型的段. 比如我现在扫描的目标是一款电信光猫,那自然是选择电信的IP段,光猫一般是家庭用户,我们筛选下家庭用户的活跃IP段,这样我们就有针对性了. 再比如我现在想扫一款企业路由设备,那么我就可以选择企业公司多的段. 纯真IP真心是个不错的工

  • python脚本爬取字体文件的实现方法

    前言 大家应该都有所体会,为了提高验证码的识别准确率,我们当然要首先得到足够多的测试数据.验证码下载下来容易,但是需要人脑手工识别着实让人受不了,于是我就想了个折衷的办法--自己造验证码. 为了保证多样性,首先当然需要不同的字模了,直接用类似ttf格式的字体文件即可,网上有很多ttf格式的字体包供我们下载.当然,我不会傻到手动下载解压缩,果断要写个爬虫了. 实现方法 网站一:fontsquirrel.com 这个网站的字体可以免费下载,但是有很多下载点都是外链连接到其他网站的,这部分得忽略掉.

  • 基于Python_脚本CGI、特点、应用、开发环境(详解)

    CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口. CGI程序可以是Python脚本.Perl脚本.Shell脚本.C或者C++程序等. 服务器 在你进行CGI编程前,确保您的Web服务器支持CGI及已经配置了CGI的处理程序. 所有的HTTP服务器执行CGI程序都保存在一个预先配置的目录.这个目录被称为CGI目录,并按照惯例,它被

  • Python 实现数据库(SQL)更新脚本的生成方法

    我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了什么,这个真是非常让人头疼.因此我就试着用Python来实现自动的生成更新脚本,以免我这烂记性,记不住事. 主要操作如下: 1.在原先 basedao.py 中添加如下方法,这样旧能很方便的获取数据库的数据,为测试数据库和生产数据库做对比打下了基础. def select_database_stru

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

     python脚本替换指定行实现步骤        本文主要介绍了Python的脚本替换,由于工作的需要,必须对日志系统进行更新,这里在网上搜索到一篇文章比较不错,这里记录下,大家可以参考下, 工作中需要迁移代码,并把原来的日志系统更新到现在的格式,原来获取log的格式是 AuctionPoolLoggerUtil.getLogger() 现在获取log的格式是: LoggerFactory.getLogger(XXXXX.class) 这里的XXXXX需要替换为当前的类名.如果这样的java文

  • 实现 Python 脚本生成命令行

    目录 Fire 使用方法 方法支持 类支持 重新改写 有时候我们会有这样的一个需求: 我们定义了一个 Python 的方法,方法接收一些参数,但是调用的时候想将这些参数用命令行暴露出来. 比如说这里有个爬取方法: import requests def scrape(url, timeout=10): response = requests.get(url, timeout=timeout) print(response.text) 这里定义了一个 scrape 方法,第一个参数接收 url,即

  • 对python for 文件指定行读写操作详解

    1.os.mknod("test.txt") #创建空文件 2.fp = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件 3.关于open 模式: 详情: w:以写方式打开, a:以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+:以读写模式打开 w+:以读写模式打开 (参见 w ) a+:以读写模式打开 (参见 a ) rb:以二进制读模式打开 wb:以二进制写模式打开 (参见 w ) ab:以二进制追加模式打开 (

  • python读取文件指定行内容实例讲解

    python读取文件指定行内容 import linecache text=linecache.getline(r'C:\Users\Administrator\Desktop\SourceCodeofMongoRedis\chapter_5\generate_string.py',10) 第十行内容为# info = '''1000001 王小小''' 实例扩展: 本文实例讲述了Python3实现从文件中读取指定行的方法.分享给大家供大家参考.具体实现方法如下: ''' 遇到问题没人解答?小编

  • Python pandas删除指定行/列数据的方法实例

    目录 1.滤除缺失数据dropna() 1)滤除含有NaN值的所有行 2)滤除含有NaN值的所有列 3)滤除元素都是NaN值的行 4)滤除元素都是NaN值的列 5)滤除指定列中含有缺失的行 2.删除重复值 drop_duplicates() 1)keep=“first” 2)keep=“last” 3)keep=False 4)删除指定列中重复项对应的行 3.根据指定条件删除行列drop() 1).删除指定列 2).删除指定行 总结 1.滤除缺失数据dropna() import pandas

  • Python pandas替换指定数据的方法实例

    目录 一.构造dataframe 二.替换指定数据(fillna.isin.replace) 1.用"sz"列的同行数据将"bj"列的空值替换掉 2.在1的基础上,将"sz"列为2或者6的数据替换成-4 三.替换函数replace()详解 1.全局替换元素 2.通过指定条件替换元素 3.通过模糊条件替换指定元素 总结 一.构造dataframe import pandas as pd import numpy as np df=pd.DataFr

  • 简单文件操作python 修改文件指定行的方法

    例一: 复制代码 代码如下: #!/usr/bin/pythonimport sysimport reif __name__=="__main__": f=file("hi.txt","w+") li=["hello\n","hi\n"] f.writelines(li) f.close() "W+"模式:如果没有hi.txt则创建文件写入:如果存在,则清空hi.txt内容,从新写入.

  • Python脚本实现代码行数统计代码分享

    之前用bash实现过(http://www.jb51.net/article/61943.htm),不过那个不能在windows下使用,所以就写了个python版,也方便我以后使用--这里就不多介绍了,不懂的google下. 实现代码 复制代码 代码如下: #!/usr/bin/python '''         File      : count.py         Author    : Mike         E-Mail    : Mike_Zhang@live.com ''' i

  • python脚本第一行如何写

    脚本语言的第一行的目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它. 写法: #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器. #!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里.当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作. #!/usr/bin/python相当于写死了pytho

  • Python实现脚本转换为命令行程序

    目录 搭建骨架脚本 使用 Pyscaffold 创建应用程序 CLI 工具化 测试 搭建骨架脚本和模块 在我的职业生涯中,我写过.用过和看到过很多随意的脚本.一些人需要半自动化完成任务,于是它们诞生了.一段时间后,它们变得越来越大.它们在一生中可能转手很多次.我常常希望这些脚本提供更多的 命令行工具式 的感觉.但是,从一次性脚本到合适的工具,真正提高质量水平有多难呢?事实证明这在 Python 中并不难. 搭建骨架脚本 在本文中,我将从一小段 Python 代码开始.我将把它应用到 ​ ​sca

随机推荐