学术资讯 » 学术资源

  • 首 页
  • 期刊选题
  • 期刊点评
  • 期刊大全
  • 学人博客
  • 编辑征稿
  • 投稿选刊
  • 万维群组
  • 学术会议
  • 万维读书
  • SCI/E期刊
  • SSCI期刊
  • AHCI期刊
  • 【技能技巧】python按文本内容查找:.py/.txt/.csv/.xml

    阅读: 2022/10/14 15:12:47

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

    代码中只需要修改search_word和search_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可以匹配python或jyson,注意并不能匹配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 :匹配空字符,如\t(tab)、\r\n(回车)、‘ ‘(空格)、\f\v(并不知是什么)

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

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

    \W :同理,和上面相反

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

    """

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

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


    浏览(435)
    点赞(0)
    收藏(0)
  • 上一篇:战争与儿童

    下一篇:2023年卫生高级职称考试备考:高级职称评审这「6大问题」

  • 首页

  • 文章

  • 期刊

  • 帮助

  • 我的

版权所有 Copyright@2023    备案号:豫ICP备2021036211号