我们在软件研发中不可避免的要用到大量的反复性的繁琐的工作,比如批量改动代码中接口的字符串。批量下载文件并又一次按规则命名。这些工作人工做特别累,尤其是对我这样的懒人来说。

对于一个出色的程序猿来说,反复是最不能接受的事情之中的一个,因此我们要发明工具把反复的工作自己主动化。曾经我是用linux shell脚本来完毕这些事情的,但因为shell脚本语法能力的限制。有些复杂功能无法有效高速的实现,而且写出的代码难以维护,基本属于一次性代码,非常难复用。因此后面慢慢開始尝试用Python完毕一些自己主动化脚本。因为Python语言强大的表现力和严格的书写规范,这些缺点都攻克了!

近期打算把一些日常研发过程用的Python脚本逐步整理出来开源。于是就有了这个专题,希望可以帮助大家摆脱那些繁琐的工作。

代码以最Pythonic的方式实现,工具代码会不断更新,项目git地址 https://github.com/offbye/TaoPyTools ,记得给star啊

今天先分析一个批量删除文件夹指定扩展名的文件里含指定字符串的行的脚本。这个脚本能够用来批量删除代码中的Log语句等。

#!/usr/bin/python2.7
# -*- encoding: UTF-8 -*-
# Copyright 2014 offbye """Delete lines contains some string form all expected extension files in path
批量删除文件夹指定扩展名的文件里含指定字符串的行 能够指定文件夹和文件扩展名
暂时写的一个工具脚本,与App生成系统无关 Usage: python delstr_path.py -p YOUR_PATH -e FILE_EXTENSION -s CONTAIN_STRING_WANT_TO_DELETE
""" __author__ = ['"Xitao":<offbye@gmail.com>'] import sys
import os
import shutil
import getopt def delstr_path(p, findstr, suffix='js'):
# 传递路径及两个字符串作为參数
workdir = p
os.chdir(workdir)
cwd = os.getcwd()
dirs = os.listdir(cwd)
for tmp in dirs:
path = os.path.join(cwd, tmp)
#print 'path=', path
#假设是文件
if os.path.isfile(path):
#推断文件扩展名
if os.path.splitext(tmp)[1][1:] == suffix:
tmp_name = path + '.bak'
tmp_file = open(tmp_name, "w")
with open(path) as f:
lines = f.readlines()
for line in lines:
# 假设包括字符串则跳过,否则写入暂时文件
if line.find(findstr) > -1:
continue
tmp_file.write(line)
tmp_file.close()
# 使用新文件替换原文件
shutil.move(tmp_name, path) #假设是路径,递归
elif os.path.isdir(path):
print("Enter dir: " + path)
delstr_path(path, findstr) if __name__ == "__main__":
print("delele contains str in path")
opts, args = getopt.getopt(sys.argv[1:], "hp:e:s:")
path = ''
find_str = ''
extension = ''
for op, value in opts:
if op == "-p": # 获取路径
path = value
elif op == "-e": # 获取路径
extension = value
elif op == "-s":
find_str = value
print("Delete lines contains {0} form all {1} files in path {2} ".format(find_str, extension, path))
delstr_path(path, find_str, extension)
sys.exit()
elif op == "-h":
print("Usage: python delstr_path.py -p YOUR_PATH -e FILE_EXTENSION -s CONTAIN_STRING_WANT_TO_DELETE")
sys.exit()

涛哥的Python工具箱之批量删除含指定字符串行的更多相关文章

  1. Editplus 正则表达式 删除含有指定字符串的行 删除注释

    1.删除含有指定字符串的行 替换:  ^.*(指定字符串).*$  为空 例如,删除含有"JOIN"的行, 替换:  ^.*JOIN.*$   为空 2.删除//行注释 替换: / ...

  2. php--jquery操作全选、批量删除、加减行

  3. jquery操作全选、批量删除、加减行

    --------------------------------------------------------------------------------------- html静态页面 --- ...

  4. 涛哥的Python脚本工具箱之生成带Logo的二维码

    近期须要在二维码上加Logo,网上没有找到好用的,于是自己用python写了一个. 须要安装qrcode,PIL库 二维码简称 QR Code(Quick Response Code),学名为高速响应 ...

  5. shell 批量删除所有指定名字的目录

    例如删除当前目录下所有名字为DerivedData的目录 find . -name "DerivedData" -type d -exec rm -r "{}" ...

  6. java如何实现批量删除pdf指定的页数

    依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app ...

  7. 拾遗:Vim 批量删除匹配到的行

    删除包含特定字符的行 g/pattern/d (全局删除匹配行) ,5g/pattern/d (删除第1-5行里的匹配行) 删除不包含指定字符的行 v/pattern/d g!/pattern/d ( ...

  8. .NET批量删除代码前的行号

    1 EmEditor Pro.EditPlus .visual studio   ,把有行号的代码粘贴进去,按住键盘的Alt键,然后用鼠标拖出选择框列选行号,最后按Delete删除行号; 2 使用正则 ...

  9. 【VI】如何删除匹配指定字符串的行(已解决)

    命令: g/pattern/d 如,删除包含字母 hell 的行 g/hell/d 删除 不 匹配指定字符的行(未验证,有需要的朋友可以试一下) v/pattern/d g!/pattern/d

随机推荐

  1. poj 3026(BFS+最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12032   Accepted: 3932 Descri ...

  2. MVC中AuthorizeAttribute用法并实现授权管理

    1.创建一个类(用来检查用户是否登录和用户权限)代码如下 public class MemberCheckAttribute : AuthorizeAttribute { //AuthorizeAtt ...

  3. laravel按月/时间区间查询数据

    public function payRollList($time) { $member_phone = Session::get(phone'); $engineer = Engineer::get ...

  4. protostuff序列化使用

    背景 最近在做项目的时候需要使用持久化功能,1.0版本中使用的akka自带的持久化功能,使用的是akka persist支持的redis插件,在使用的过程中踩了一些坑.因此,在而2.0版本中考虑自己往 ...

  5. Android UI 常用图标尺寸规范

    1. 程序启动图标: LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px. MDPI (Medium Density Screen, 160 DPI ...

  6. IntelliJ IDEA 14.x 的 project 和 module 是啥关系?

    使用基于IntelliJ的IDE,如phpstorm.android studio都会对project和module的关系比较糊涂,简单的概括如下: IntelliJ系中的 Project 相当于Ec ...

  7. iis7文件夹 首页设置

    iis7在默认文档中可以设置首页,一般可以直接设置网站根目录下的页面为首页,但是当页面不在根目录下时,直接按路径添加就不行了,如“admin/default.aspx”.添加完后只有“default. ...

  8. 学号20175313 《数据库MySQL(课下作业,必做)》第十周

    目录 一.题目要求 二.需求分析 三.关键代码以及运行结果截图 任务一 任务二 任务三 任务四 四.代码实现过程中遇到的问题及其解决方法 五.码云链接 六.心得体会 一.题目要求 下载附件中的worl ...

  9. poj 2324 Anniversary party(树形DP)

    /*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...

  10. 设计模式之装饰器模式(PHP实现)

    /** * 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. * 这种模式创建了一个 ...