在目录的文件中搜索字符串

彼得

我需要帮助编写轻量级 Python (v3.6.4) 脚本来搜索文件和文件夹目录中的单个关键字。目前,我正在使用 Notepad++ 来搜索文件目录,尽管我相信 Python 脚本会更快?

当前脚本:

import os
key = input("Search For?: ")
folder = os.listdir("/")
for line in folder:
    if key in line:
        print(line)

编辑:我使用 Notepad++ 来运行这些搜索查询。

我想搜索的目录在文件夹中有多个级别的文件。

泽维尔

你真的应该使用grep(即grep -Ril "keyword" /),或者,如果在Windows中,findstrfindstr /I /M /C:"keyword" /S \*),但如果你坚持通过Python的做它,你需要使用os.walk()步行通过根目录递归,然后打开每一个找到的文件和叠代找到,如果它包含您想要的关键字,例如:

import os

keyword = input("Search For?: ")  # ask the user for keyword, use raw_input() on Python 2.x

root_dir = "/"  # path to the root directory to search
for root, dirs, files in os.walk(root_dir, onerror=None):  # walk the root dir
    for filename in files:  # iterate over the files in the current dir
        file_path = os.path.join(root, filename)  # build the file path
        try:
            with open(file_path, "rb") as f:  # open the file for reading
                # read the file line by line
                for line in f:  # use: for i, line in enumerate(f) if you need line numbers
                    try:
                        line = line.decode("utf-8")  # try to decode the contents to utf-8
                    except ValueError:  # decoding failed, skip the line
                        continue
                    if keyword in line:  # if the keyword exists on the current line...
                        print(file_path)  # print the file path
                        break  # no need to iterate over the rest of the file
        except (IOError, OSError):  # ignore read and permission errors
            pass

测试:我刚刚测试了它,PyEnum_Type通过在运行 CPython 3.5.1 的本地系统上克隆到(因此)的CPython 源代码搜索,结果如预期:F:\.tmp\cpython-masterroot_dir = r"F:\.tmp\cpython-master"

搜索?:PyEnum_Type 
F:\.tmp\cpython-master\Include\enumobject.h 
F:\.tmp\cpython-master\Objects\enumobject.c 
F:\.tmp\cpython-master\Objects\object.c 
F:\.tmp\cpython-master\PC\python3.def 
F:\.tmp\cpython-master\Python\bltinmodule.c

如果它没有产生任何结果,您很可能设置了错误的路径,或者您正在搜索定义下的文件中不存在的内容root_dir(或者您的用户无权访问它们)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Linux从.bz2文件中递归地在子目录中搜索文本字符串

在文件中搜索字符或字符串(java)

C#搜索目录中包含字符串的所有文件,然后返回该字符串

r在目录的文件名中搜索带有'&'的多个字符串

在文件中搜索反向字符串

搜索目录和子目录中包含特定字符串的所有文件并删除字符串

在多个文件/目录中搜索字符串,然后打印文本文件的内容

如何使用Windows CMD搜索和替换多个文本文件(目录中)中的字符串?

在战争中的所有文件中搜索字符串

在目录中文件中的VBA字符串搜索在Excel 2007中不起作用

在目录中搜索字符串-获取不带文件名的输出

在目录中搜索字符串

如何从Haskell中的文件/字符串中搜索模式

在目录中搜索多行字符串

在当前目录的文件中搜索字符串,省略重复项

使用findstr在子目录中搜索字符串?

如何在目录中的所有文件中搜索字符串?我的内存不足异常

在文件中搜索字符串

搜索目录中很多文件中的字符串(如果找到),保存文件名和行

在json文件中搜索字符串

在主目录中的最近2分钟内搜索包含特定字符串的最后修改的文件

如何编写bash脚本以在当前目录中的所有文件中搜索多个字符串?

文件名包含空格时,搜索并替换目录中所有.php文件中的登录字符串

从数组中搜索字符串的文件

Python:如何在目录名(不是单个文件名)中搜索特定的“字符串”

在包含同一行字符串的工作目录(及其子目录)中搜索文件

Bash:搜索目录中是否存在一个文件中的字符串并对其运行命令

用于搜索excel文件目录以查找仅搜索1个文件的字符串的Powershell脚本

如何在目录中的文本文件中搜索多个字符串模式