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



如果能为一个沮丧和困惑的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)

最新更新