• 涛哥的Python工具箱之批量删除含指定字符串行


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

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


  • 相关阅读:
    [LeetCode][JavaScript]Combination Sum II
    [LeetCode][JavaScript]Generate Parentheses
    [LeetCode][JavaScript]Contains Duplicate
    [LeetCode][JavaScript]Regular Expression Matching
    [LeetCode][JavaScript]Combination Sum
    [LeetCode][JavaScript]Two Sum
    Windows Live Writer的Markdown插件MarkdownInLiveWriter支持语法高亮了
    各种Markdown处理器的列表
    用ChooseALicense帮自己选一个开源license,然后用AddALicense给自己的github自动加上license文件
    遇到奇怪的C#/C/C++或者Java的bug可以去问问Coverity
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6760196.html
Copyright © 2020-2023  润新知