如何在python中递归搜索文件中的字符串

时间:2015-08-12 11:08:54

标签: python python-3.x

我正在尝试查找C:\中的所有日志文件,然后在这些日志文件中找到一个字符串。如果找到该字符串,则输出应该是找到该字符串的日志文件的abs路径。以下是我到目前为止所做的事情。

import os
rootdir=('C:\\')
for folder,dirs,file in os.walk(rootdir):
    for files in file:
        if files.endswith('.log'):
            fullpath=open(os.path.join(folder,files),'r')
            for line in fullpath.read():
                if "saurabh" in line:
                    print(os.path.join(folder,files))

1 个答案:

答案 0 :(得分:2)

您的代码已损坏:

for line in fullpath.read():

语句fullpath.read()将整个文件作为一个字符串返回,当您迭代它时,您将一次迭代一个字符。你永远不会找到字符串' saurabh'一个字符。

文件是它自己的行迭代器,所以只需将此语句替换为:

for line in fullpath:

另外,为了清洁起见,您可能需要在完成后关闭文件,无论是显式还是使用with语句。

最后,您可能希望在找到文件时中断,而不是多次打印相同的文件(如果您的字符串多次出现):

import os
rootdir=('C:\\')
for folder, dirs, files in os.walk(rootdir):
    for file in files:
        if file.endswith('.log'):
            fullpath = os.path.join(folder, file)
            with open(fullpath, 'r') as f:
                for line in f:
                    if "saurabh" in line:
                        print(fullpath)
                        break