如何检查文件名是在os.listdir('。')?

时间:2017-07-25 10:50:37

标签: python python-3.x

我使用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 ...')

2 个答案:

答案 0 :(得分:1)

Python 3上的

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')