根据名称模式查找特定文件的代码-break命令有问题



我是python新手,这是我的第一个问题。如果有任何提示,我将不胜感激。

我写了一段代码,它遍历指定文件夹中的文件,以查找名称与regex模式匹配的文件(文件名的一部分(。代码是可行的,但我有问题。请看一看,我稍后会解释:

import re, os, sys
basedir = '/home/user_name/python_files'
print('Please specify DG, year and dossier number.')
print()
DG = input('DG: ')
year = str(input('Year: '))
dossier = str(input('Dossier: '))
fileregex = DG + '-'+ year + '-' + dossier
for r, d, f in os.walk(basedir):
for file in f:
if re.match(fileregex, file, re.I):
print('I found the file', file, 'in', os.path.join(r))
break
else:
print('File not found')

当代码找到文件时,它会打印出文件名并中断;如果没有,则打印File not found。到目前为止,一切都很好。然而,代码在找到第一个匹配项后就会中断,我希望它继续寻找其他匹配项。

如果我删除break语句,它会找到其他(部分匹配的(文件,但也会打印出File not found

如何确保代码在找到所有匹配项后仅中断,并仅在未找到任何匹配项时打印出File not found

谢谢。Greg

您可以将所有匹配项保存在列表中。然后,如果没有匹配项,列表的长度将为0,因此您可以检查列表的长度以查看是否有匹配项。

matches = []
for r, d, f in os.walk(basedir):
for file in f:
if re.match(fileregex, file, re.I):
matches.append((file, os.path.join(r)))
if len(matches) == 0:
print('File not found')
else:
for file, path in matches:
print(f'This file was a match: {file} and was found: {path}')

可以使用列表来存储数据,然后检查列表是否为空

这是我的解决方案

files = []
for r, d, f in os.walk(basedir):
for file in f:
if re.match(fileregex, file, re.I):
files.append([file, os.path.join(r)])
if len(files) > 0:
for file in files:
print(f"I found a file {file[0]} in {file[1]}")
else:
print('File not found')

相关内容

最新更新