我需要扫描目录以查找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
之后打印消息。
我需要编写通用代码,同时还要扫描目录中的其他日志文件以进行文本搜索。
答案 0 :(得分:0)
使用glob.glob
或os.scandir
或fnmatch.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)
答案 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"
,并在该行上打印行号和整个文本消息。