首页 > 解决方案 > Python re.compile 针对目录中的所有文件 - 不搜索所有文件

问题描述

我正在编写一个 Python 3.7.2 脚本,它使用 re.compile 搜索目录中的所有文件并返回出现特定字符串的每一行。它工作正常,除了两个问题:

  1. 目录中有数百个文件,但脚本仅针对前 25 个文件运行。
  2. 然后它无限期地重新运行前 25 个。

有什么建议么?这是脚本:

import os
import re

err_occur = []
pattern = re.compile(r"An important phrase")
path = "/users/mypath/"

for filename in os.listdir(path):
    try:
        with open(os.path.join(path, filename), encoding="UTF-8") as in_file:
            for linenum, line in enumerate(in_file):
                if pattern.search(line) != None:
                    err_occur.append((linenum, line.rstrip('\n')))
            for linenum, line in err_occur:
                print(line, sep='')
    except FileNotFoundError:
        print("Input file not found.")

标签: pythonregexpython-3.x

解决方案


我认为您的问题可能与缩进有关。

我已经移动了一些代码并取消了内部 for 循环的缩进。试试这个代码:

import os
import re

err_occur = []
pattern = re.compile(r"An important phrase")
path = "/users/mypath/"

for filename in os.listdir(path):

    try:
        with open(os.path.join(path, filename), encoding="UTF-8") as in_file:
            for linenum, line in enumerate(in_file):
                if pattern.search(line) != None:
                    err_occur.append((linenum, line.rstrip('\n')))
    except FileNotFoundError:
        print("Input file not found.")

for linenum, line in err_occur:
       print(line, sep='')

推荐阅读