首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中,如何删除不包含特定文件扩展名(即.pdf)的子目录?

在Python中,如何删除不包含特定文件扩展名(即.pdf)的子目录?
EN

Stack Overflow用户
提问于 2015-05-13 17:33:29
回答 1查看 690关注 0票数 2

我正在编写一个程序,该程序物理地删除目录中没有任何.pdf文件的所有子目录。

我认为这个解决方案需要os.walk,但还没有解决太多问题。

我创建了一个递归函数来完成这个任务,但我不确定它是否有效

代码语言:javascript
运行
复制
def isDirectory(path):
    if os.path.isdir(path):
        for file in listdir(path):
            newpath=os.path.join(path,file)
            isDirectory(newpath)
        if listdir(path)== []:
            os.rmdir(path)
            return
        else:
            return
    elif os.path.basename(path)=='.pdf':
        #array.append(os.path.basename(path))
        return
    else:
        os.remove(path)
        return
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-14 17:50:04

下面是一个执行所需功能的函数。我添加了几个print语句来显示它的工作情况并记录它。

代码语言:javascript
运行
复制
def removeNonPDFDirectories(dpath):
    '''Visit 'dpath', removing any subdirectory not containing any PDF
       file. Return True if 'dpath' is removed.
    '''
    import os
    if os.path.isdir(dpath):
        print 'Entering', dpath
        entries = [os.path.join(dpath, entry) for entry in os.listdir(dpath)]
        subdirs = filter(os.path.isdir, entries)
        print '    Subdirectories:', subdirs
        if all(map(removeNonPDFDirectories, subdirs)):
            print '    All subdirectories were removed.'
            files = filter(os.path.isfile, entries)
            pdf_files = [f for f in files if f.endswith('.pdf')]
            print '    PDF files:', pdf_files
            if not pdf_files:
                try:
                    for f in files:
                        os.unlink(f)
                        print '    Removed file', f
                    os.rmdir(dpath)
                    print '    Removed directory', dpath
                except OSError as e:
                    # An error occurred: assume directory is not empty.
                    print '    ERROR:', e
                    print '    Keeping directory', dpath
                    return False
                # Directory was removed: report to caller.
                return True
        # Directory must be kept: report to caller.
        print '    Keeping directory', dpath
        return False
    else:
        return False
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30221674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档