我正在尝试删除目录中的几个文件。
到目前为止,我有该代码:
for filename in glob.glob("buffer*" ):
os.remove(filename)
for filename in glob.glob("grid*" ):
os.remove(filename)
for filename in glob.glob("OSMroads*" ):
os.remove(filename)
for filename in glob.glob("newCostSurface*" ):
os.remove(filename)
for filename in glob.glob("standsLine*" ):
os.remove(filename)
for filename in glob.glob("standsReprojected*" ):
os.remove(filename)
有办法提高效率吗?
glob
当然,进行6次单独的调用将迭代目录对象6次。
幸运的是,在几乎所有平台上,它都可能在第一次之后就被缓存了。除非您的目录绝对是巨大的,否则这不会是一个明显的问题。
但是,由于您明确询问了效率,因此您显然可以迭代一次并过滤结果。最简单的方法是使用fnmatch
。所有glob
要做的就是调用listdir
,然后调用fnmatch
每个结果。您可以通过多个fnmatch
呼叫执行相同的操作:
for filename in os.listdir('.'):
if fnmatch.fnmatch(filename, 'buffer*'):
os.remove(filename)
# etc.
当然,您可以用与简化现有代码完全相同的方式来简化此操作:
for filename in os.listdir('.'):
for pattern in ['buffer*', 'grid*', 'OSMroads*',
'newCostSurface*','standsLine*', 'standsReprojected*']:
if fnmatch.fnmatch(filename, pattern):
os.remove(filename)
或者:
for filename in os.listdir('.'):
if any(fnmatch.fnmatch(filename, pattern)
for pattern in ['buffer*', 'grid*', 'OSMroads*',
'newCostSurface*','standsLine*', 'standsReprojected*']):
os.remove(filename)
如果您确实需要压缩百分之一的性能,可以使用fnmatch.translate
将每个模式转换为一个正则表达式,然后将正则表达式合并为一个替代项,然后对其进行编译,然后将该正则表达式对象应用于每个文件名。但是,fnmatch
与读取目录对象的I / O时间相比,CPU时间可能很小,甚至无法衡量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句