Python 在多个子目录中的文件中搜索特定字符串和 return 文件路径(如果存在)

Python search files in multiple subdirectories for specific string and return file path(s) if present

如果能为沮丧和困惑的 Python 初学者提供一些帮助,我将非常感激。

我正在尝试创建一个脚本,用于在包含多个子目录和不同文件类型的 windows 目录中搜索文件内容中的特定单个字符串(名称),如果找到则将文件名打印为列表.在 100 个子目录中大约有 2000 个文件,我要搜索的所有文件不一定具有相同的扩展名 - 但本质上都是 ASCII 文件。

我已经尝试这样做很多很多天了,但就是想不通。

到目前为止,我已经尝试使用 glob 递归结合读取文件,但我非常困惑。我可以成功打印所有子目录中所有文件的列表,但不知道从这里去哪里。

import glob
files = []
files = glob.glob('C:\TEMP' + '/**', recursive=True)
print(files)

谁能帮帮我?我是 72 岁的科学家,正在努力提高我的技能并“将无聊的东西自动化”,但此刻我只是失去了意志。

非常感谢您提前来到这个社区。

很高兴你能来!

至此你就找到了所有的文件路径,现在最简单的方法就是遍历每一个文件,一个一个读入内存,看你要找的名字有没有.

import glob
files = glob.glob('C:\TEMP' + '/**', recursive=True)

target_string = 'John Smit'

# itereate over files
for file in files:
    try:
        # open file for reading
        with open(file, 'r') as f:
            # read the contents
            contents = f.read()
        # check if contents have your target string
        if target_string in conents:
            print(file)
    except:
        pass

这将在每次找到名称时打印文件路径。

另请注意,我已从您的代码中删除了第二行,因为它是多余的,无论如何您都在第 3 行启动列表。

希望对您有所帮助!

你可以这样做,但我认为一定有更好的方法

当您找到目录中的所有文件时,您将遍历它们并检查它们是否包含该特定字符串。

for file in files:
    if(os.path.isfile(file)):
        with open(file,'r') as f:
            if('search_string' in f.read()):
                print(file)