使用占位符删除文件

时间:2015-02-05 21:16:54

标签: python python-3.x

我想使用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行为?

2 个答案:

答案 0 :(得分:3)

您需要使用globfnmatch来正确填充扩展的全局内容。加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))