我正在使用os.walk遍历目录,并希望计算该目录.java文件中的行数。从其他答案中发现,我可以使用fnmatch.filter仅获得如下的.java文件:
for (root, dirs, files) in os.walk(project_directory):
for file in fnmatch.filter(files, '*.java'):
# get line count
但是,我想排除一些具有特定名称的文件,例如MyExclusion.java。我如何增强过滤器以避免搜索这些文件?我能找出的最好办法是添加另一个条件:
for (root, dirs, files) in os.walk(project_directory):
for file in fnmatch.filter(files, '*.java'):
if file != 'MyExclusion.java':
# get line count
可以使用fnmatch.filter来执行此操作,还是我被迫在此处添加条件检查?
您可能已经将过滤器传递给另一个过滤器函数,或者只是构造了一个列表理解器。
>>> files = ['manifest.xml', 'Test.java', 'Foo.java', 'MyExclusion.java']
>>> [f for f in fnmatch.filter(files, '*.java')
... if f not in ('MyExclusion.java', 'Bad.java')]
['Test.java', 'Foo.java']
使用正则表达式的替代方法:编译模式并将其替换为if条件
>>> import re
>>> patt = re.compile('^(MyExclusion|Bad)')
>>> [i for i in fnmatch.filter(files, '*.java') if not patt.search(i)]
['Test.java', 'Foo.java']
考虑使用生成器表达式而不是列表推导,以便执行以下操作:
for file in (i for i in fnmatch.filter(files, '*.java') if not patt.search(i)):
# get line count
为了避免一次全部生成第二个列表,可能会减少内存消耗。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句