【问题标题】:Delete pdf files in folders and subfolders with python?用python删除文件夹和子文件夹中的pdf文件?
【发布时间】:2015-02-08 07:10:30
【问题描述】:

我尝试删除 300 个 pdf 文件。所有的pdf文件都以不同的名称,它们都分布在一个大文件夹中,该文件夹分为很多子文件夹和子子文件夹。我怎样才能用 python 做到这一点(我使用 python 2.7.8)?

【问题讨论】:

    标签: python python-2.7 pdf delete-file


    【解决方案1】:

    使用shutil.rmtree,可以递归删除目录。

    import shutil
    shutil.rmtree('/path/to/directory/that/contains/pdfs')
    

    如果目录包含其他不是 pdf 文件的文件,请改用以下文件(使用 os.walk 递归遍历目录,os.remove/os.unlink 删除 pdf 文件)。

    import os
    
    for parent, dirnames, filenames in os.walk('/path/to/the/directory'):
        for fn in filenames:
            if fn.lower().endswith('.pdf'):
                os.remove(os.path.join(parent, fn))
    

    【讨论】:

    • 我认为这会删除目录,但如果包含.pdf以外的其他文件怎么办?
    • @Michael9,我根据您的评论更新了答案。谢谢。
    【解决方案2】:

    如果您只想删除pdf 文件,您可以使用os.walk 函数和fnmatch.fnmatch 函数。

    import os
    from fnmatch import fnmatch
    
    for dirpath, dirnames, filenames in os.walk(os.curdir):
        for file in filenames:
            if fnmatch(file, '*.pdf'):
                os.remove(os.path.join(dirpath, file))
    

    【讨论】:

      【解决方案3】:

      os.chdir 更改目录。只需进行一些调整以定位到其他目录

       #!/usr/bin/env python
          import glob
          import os
          directory='/path/folder1/folder2'
          os.chdir(directory)
          files=glob.glob('*.pdf')
          for filename in files:
              os.unlink(filename)
      

      【讨论】:

        【解决方案4】:

        假设您想在维护子文件夹树的同时删除文件,您可以使用递归算法:

        import os
        
        def recursively_remove_files(f):
            if os.path.isfile(f):
                os.unlink(f)
            elif os.path.isdir(f):
                map(recursively_remove_files, [os.path.join(f,fi) for fi in os.listdir(f)])
        
        recursively_remove_files(my_directory)
        

        【讨论】: