2014-01-10 86 views
3

我正在使用shutil.rmtree删除一个目录,但其他进程(我不控制)在该树中创建文件无法创建文件,因为这些目录不存在。是否有如shutil.rmtree那样简单的操作,只删除文件但保留目录结构?shutil.rmtree只能删除文件吗?

回答

3

我不认为有一个内置的功能,要做到这一点,但它自己使用os.walk()你可以很容易做到:

for dirpath, dirnames, filenames in os.walk(my_directory): 
    # Remove regular files, ignore directories 
    for filename in filenames: 
     os.unlink(os.path.join(dirpath, filename)) 
+0

我想你需要'os.path.join(my_directory,dirpath,文件名)',不是吗? – zwol

+0

不符合[os.walk](文档)。相关片段_要获取完整路径(从顶部开始)到dirpath中的文件或目录,请执行os.path.join(dirpath,name)._ – alejandro

0

如果你想这样做在一个行,你有GNU发现,外包:

subprocess.check_call(["find", "-H", directory, "!", "-type", "d", "-delete"]) 

这也让已经非常仔细地专家编码的优点是避免了多次的比赛条件,可以允许同一系统上的恶意程序诱骗你的过程变成删除一些它不该没有。我认为实际上可以避免使用os.walk来避免所有;你需要一个API来让你使用unlinkatfchdir

0

怎么是这样的:

import os 

def rm_files_in_tree(dir): 
    for root, dirs, files in os.walk(dir): 
     for file in files: 
      path = os.path.abspath(os.path.join(root, file)) 
      os.remove(path)