投稿问答最小化  关闭

万维书刊APP下载

【技能技巧】python按文本内容查找:.py/.txt/.csv/.xml

2022/10/14 15:12:47  阅读:328 发布者:

经常会遇到一件事情就是:需要从很多文件中找到某个特定的历史文件。有些时候想找数据或者代码,发现忘记文件名称了,或者文件夹太多不想挨个的去翻,但是又隐约记得那个文件里包含什么数据,或者包含哪些代码语句。这时候只要按照文件内容搜索一下就好了。

代码中只需要修改search_wordsearch_path就行了。search_word:要搜索的关键词;search_path:文件所在文件夹,会遍历所有子文件夹。目前只是针对.py/.txt/.csv/.xml文件,感兴趣可以自行优化。

代码:

# -*- coding: utf-8 -*-

"""

@author: CZ

E-MAIL: CHINESEVOICE@163.COM

"""

import re

import os

def main(path=None,keyword = None):

    print(keyword)

    if keyword == None:

        raise "Input your word, please."

    if path == None:

        path = os.getcwd()

    for root, _, files in os.walk(path):

        for file in files:

            if file.endswith((".py",".txt",".csv",".xml")):

                searchnow = os.path.join(root,file)

                file = open(searchnow,"r",encoding="utf-8")

                # pattern = keyword

                # print(pattern)

                count = 0

                for items in file.readlines():

                    lst = re.findall(keyword, str(items))

                    if len(lst) > 0:

                        count += len(lst)

                if count != 0:

                    print(" "+searchnow)

                    print("  查到 "+str(count)+" {}".format(keyword))

                file.close()

if __name__ == "__main__":

    #可使用正则表达式查找,具体使用方式参考文末

    search_word = r'coo.'

    search_path = "G:/Python_test"

    print("\n查找关键词为:{}\n".format(search_word))

    main(path=search_path,keyword=search_word)

    print("\n查找结束!")

    

#=================以下是正则表达式的符号含义,供参考,不影响上面代码运行========================

    """

    

    正则表达式符号含义:

    1. 基本符号

    .(英文句点) :通配符 - 用于表示任意字符

    

    \(反斜杠):转义字符 - \. 就表示单纯的英文句点符号了

    

    [](中括号):字符集 - 表示里面的任意一个,如[abc],则匹配a,b,c中的任意一个。

    [pj]ython可以匹配pythonjyson,注意并不能匹配pjython什么的。

    另外可以用[0-9]表示匹配任意一个数字,同理[a-z][A-Z]均合法。

    

    ^ :当放到字符集内的开头时表示为‘非’,如[^abc]表示匹配除abc之外的任意字符

    

    ^ :匹配字符串开头

    

    $ :匹配字符串结尾(这两个实际中几乎用不到)

    

    2. 数量词

    *(星号):零个或多个,如a*可以匹配a, aa, aaa, ...也可以匹配为空

    

    +(加号):一个或多个,与上面类似,但不可匹配为空

    

    ?(问号):0个或一个。

    

    ?(问号):把数量词变为非贪婪模式,比如,用ab*匹配abababababacdefg

    默认会匹配到ababababab,即尽量长的匹配到,但ab*?则只匹配一个ab回来。

    实际用途较多

    

    {m},重复m次,{m, n},重复m~n

    

    3. 预定义字符集

    \d :匹配数字,等价于[0-9]

    

    \D :匹配任意非数字字符,等价于[^0123456789]

    

    \s :匹配空字符,如\ttab)、\r\n(回车)、‘ ‘(空格)、\f\v(并不知是什么)

    

    \S :匹配任意非空字符,即等价于[^\t\r\n\f\v ]

    

    \w :匹配任意英文字符或数字,等价于[0-9a-zA-Z]

    

    \W :同理,和上面相反

  

    正则表达式符号参考来源:https://www.jianshu.com/p/b89979b4cd22

    """

转自:科研萌新”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com