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

对于一个出色的程序猿来说,反复是最不能接受的事情之中的一个,因此我们要发明工具把反复的工作自己主动化。曾经我是用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. 多线程设计模式 - Future模式之JAVA原生实现

    在之前一篇博客中介绍了Future设计模式的设计思想以及具体实现,今天我们来讲一下使用JDK原生的包如何实现. JDK内置的Future主要使用到了Callable接口和FutureTask类. Ca ...

  2. 高级列表控件ListCtrl关联的MFC中的类:CListCtrl

    高级列表控件ListCtrl关联的MFC中的类:CListCtrl■ 报表样式ListCtrl常用操作:1.添加列标题头:InsertColumn2.获取与设置列宽:GetColumnWidth.Se ...

  3. 项目管理软件Readmine安装配置

    1.安装依赖 #yum install curl-devel sqlite-devel libyaml-devel -y 2.安装rvm #curl -L https://get.rvm.io | b ...

  4. 【java】java自带的java.util.logging.Logger日志功能

    偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...

  5. Winform 遍历 ListBox中的所有项

    foreach(DataRowView row in listBox.Items ) { MessageBox.Show(row["displayMember"].ToString ...

  6. apache的动态和静态

    apache的动态和静态  http://www.cnblogs.com/eoiioe/archive/2008/12/23/1360476.html(2.0和2.2一样) 关于apache的动态与静 ...

  7. pure-ftp 服务配置篇

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为 "文传协议" 用于Internet上的控制文件的双向传输. FTP的主要作用,就是让 ...

  8. [分享]在ubuntu9.10下实现开机自动登录并运行自己的图形程序

    在ubuntu9.10下实现开机自动登录并运行自己的图形界面程序(本人接触ubuntu时日不长,文中一些说法难免有错误和疏漏之处,还请大家不吝批评指正.)实现步骤分以下三大步:1. 实现ubuntu文 ...

  9. BeagleBone Black板第四课:简单LED控制实验

    BBB板第四课:简单LED控制实验 学习BBB板的终于目的是想像单片机一样做控制,但控制思路全然不一样(Linux下控制硬件设备实质就是对相关设备虚拟文件的读写).研究了几天头都大了还是没有进展,网上 ...

  10. hdu4671 思维构造

    pid=4671">http://acm.hdu.edu.cn/showproblem.php? pid=4671 Problem Description Makomuno has N ...