我想使用python从目录中删除多个文件。 shell命令看起来像
rm *_some.tex
当我在python中使用这样的东西时,没有任何内容被删除:
intermediates = ('*_some.text', '*_other.text')
for intermediate in intermediates:
if os.path.isfile(intermediate):
os.remove(intermediate)
如何在python中实现shell行为?
答案 0 :(得分:3)
您需要使用glob
或fnmatch
来正确填充扩展的全局内容。加if os.path.isfile: os.remove
导致一些竞争条件。这更好:
import glob
globtexts = ('*_some.text', '*_other.text')
files = [glob.glob(globtext) for globtext in globtexts]
# try saying that line out loud five times fast....
for file in files:
try:
os.remove(file)
except Exception as e:
print("There was a problem removing {}: {!r}".format(file, e))
答案 1 :(得分:2)
或者,在Python文档的glob
旁边是fnmatch
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*_some.text') or fnmatch.fnmatch(file, '*_other.text'':
os.remove(file)
要从/home
递归执行此操作,例如,请使用os.walk
for root, dirs, files in os.walk('/home'):
for file in files:
if fnmatch.fnmatch(file, '*_some.text') or fnmatch.fnmatch(file, '*_other.text'):
os.remove((root+'/'+file))