如何使用regexp在Python目录中查找文件名

时间:2018-06-20 07:59:43

标签: python regex

我需要扫描目录以查找ex:C:\Users\Jack\Work,并搜索包含部分文本部件号ex:Worklog_201810716_081.log的文件名。
谁能帮助我,如何在代码中使用regexp来专门搜索文件名。

我用文件名实现了以下硬代码:

reg_lst = ["Error in log"]
for i, line in enumerate(open("C:\\Users\\Jack\Work\\Worklog_201810716_081.log")):
    if any(compiled_reg.match(line) for compiled_reg in reg_lst):
        print("Found on line %s" % (i+1))
        print("Log msg: ", line)

这将在Error in log文件中Worklog_201810716_081.log之后打印消息。

我需要编写通用代码,同时还要扫描目录中的其他日志文件以进行文本搜索。

2 个答案:

答案 0 :(得分:0)

使用glob.globos.scandirfnmatch.fnmatch

尝试使用glob(r'C:\Users\Jack\Work\*.log')软件包中的glob。这应该显示目录.log下的C:\Users\Jack\Work个文件的文件名列表。

未经测试的代码:

from glob import glob

reg_lst = ["Error in log"]

for filename in glob(r'C:\Users\Jack\Work\*.log'):
    with open(filename, 'r') as f:
        for i, line in enumerate(f.readlines()):
            if any(compiled_reg.match(line) for compiled_reg in reg_lst):
              print("Found on line %s" % (i+1))
              print("Log msg: ", line)

Another disscusion about filtering file by name.

答案 1 :(得分:0)

我能够编写以下代码,并且可以成功运行。

reg_lst = ["Error in log"]
work_path = "C:\Users\Jack\Work\"

for file in os.listdir(work_path):
  if fnmatch.fnmatch(file, '*.log'):
    for i, line in enumerate(open(os.path.join(work_path,file))):
        if any(compiled_reg.match(line) for compiled_reg in reg_lst):
            print("Found on line %s" % (i+1))
            print("Log msg: ", line)

它将搜索work_path目录中的所有日志文件,并搜索文本"Error in log",并在该行上打印行号和整个文本消息。