查找字符串行以递归python开头

时间:2018-04-24 11:27:23

标签: python startswith

我必须递归地找到所有文件(在目录和子目录中)的所有行(以字符串" excel"开头).i需要找到该行的每个文件名(例如:  文件名1: line1成立... 文件名2:

line2成立...... 输出结果名为" logfile" 如果没有建立行,则文件名不会保存在日志文件中。

import os
word="excel"
from os.path import join
for (dirname, dirs, files) in os.walk('/batch/'):
    for filename in files:
      thefile = os.path.join(dirname,filename)
         for line in files: 
           if line.startswith(word):
                    print (line)
                    print (thefile)

由于

2 个答案:

答案 0 :(得分:0)

这是固定代码。 您不需要重新遍历相同的文件列表。 os.walk()将返回目录中的所有子目录,您只需循环所有目录。

示例代码

x

希望这会有所帮助

答案 1 :(得分:0)

您的代码只有一些小问题:最大的问题是您循环使用文件名而不是文件内容。

import os
word="excel"
from os.path import join
for (dirname, dirs, files) in os.walk('/batch/'):
    for filename in files:
        thefile = os.path.join(dirname, filename)
        with open(thefile) as f:
            for line in f:
                if line.startswith(word):
                    print (line)
                    print (thefile)

编辑:

import os
word="excel"
from os.path import join
with open('log_result.txt', 'w') as log_file:
    for (dirname, dirs, files) in os.walk('/tmp/toto'):
        for filename in files:
            thefile = os.path.join(dirname, filename)
            with open(thefile) as f:
                lines = [line for line in f if line.startswith(word)]
            if lines:
                log_file.write("File {}:\n".format(thefile))
                log_file.writelines(lines)