我使用RegEx&一个字符串,如果这个文件名和&类似于它存在于os.listdir('。')或不存在,如果存在打印('是'),如果不打印('否'),但如果我的listdir文件名甚至不存在('。')它会显示YES。
我应该如何检查?
search = str(args[0])
pattern = re.compile('.*%s.*\.pdf' %search, re.I)
if filter(pattern.search, os.listdir('.')):
print('Yes ...')
else:
print('No ...')
答案 0 :(得分:1)
filter
是懒惰的,它不会返回list
,它会返回一个始终“真实”的生成器,无论它是否会生成项目(它不会知道它是否会用完之前)。如果你想检查它是否有任何命中,最有效的方法是尝试从中拉出一个项目。在Python 3上,你可以使用two-arg next
来懒散地执行此操作(所以当你受到攻击时停止并且不要再看了):
if next(filter(pattern.search, os.listdir('.')), False):
如果你需要完整的list
a la Py2,你只需将它包装在list
构造函数中:
matches = list(filter(pattern.search, os.listdir('.')))
在Python 2上,您现有的代码应该按照书面形式工作。
我会注意到,the glob
module通常可以更好地处理你正在做的事情。我强烈建议你去看看。
答案 1 :(得分:0)
代码的替代方案(不考虑您可能未列出的其他要求):
from pathlib import Path
search = str(args[0]).lower()
file_cnt = sum([search in file.stem.lower() for file in Path('.').glob('*.pdf')])
if file_cnt > 0:
print('Yes')
else:
print('No')