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

对于一个出色的程序猿来说,反复是最不能接受的事情之中的一个,因此我们要发明工具把反复的工作自己主动化。曾经我是用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. JAVA快速功能

    1.日期格式化 Date date=new Date(); //转换成时间格式12小时制 SimpleDateFormat df_12=new SimpleDateFormat("yyyy- ...

  2. centos7使用tomcat部署javaweb项目

    1.下载二进制安装包 tomcat下载地址 2.下载jdk和配置环境变量 这里就不再多描述不清楚,可以       参考 我的yum安装的jdk 3.在centos7下安装 tomcat #切换到/u ...

  3. TP5使用技巧

    1.fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法. 例如:$result = Db::table('think_user')->fetchSql(true)-& ...

  4. C# 获取农历日期

    //C# 获取农历日期 ///<summary> /// 实例化一个 ChineseLunisolarCalendar ///</summary> private static ...

  5. 找出数字数组中最大的元素(使用Math.max函数)

    从汤姆大叔的博客里看到了6个基础题目:本篇是第1题 - 找出数字数组中最大的元素(使用Match.max函数) 从要求上来看,不能将数组sort.不能遍历.只能使用Math.max,所以只能从java ...

  6. springboot静态资源映射

    springboot静态资源映射 WebMvcAutoConfiguration @Override public void addResourceHandlers(ResourceHandlerRe ...

  7. Longest Common Substring($LCS$)

    Longest Common Substring(\(LCS\)) 什么是子序列? 子序列就是某一个序列的不连续的一部分. 如图, \(abcde\)就是图中序列的一个子序列. 公共子序列 公共子序列 ...

  8. Group Shifted Strings -- LeetCode

    Given a string, we can "shift" each of its letter to its successive letter, for example: & ...

  9. luogu P1122 最大子树和

    题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...

  10. iptables实现IP地址重定向(转发)

    iptables不单只防火墙这么简单,NAT转发这些都很强大.但是市面上iptables的教程基本都是围绕着CentOS 6来展开的,而对于CentOS 7和Ubuntu又不一样的写法,尤其是Ubun ...