猿问

如何使用Python 3使用map()和filter()函数而不是for循环来删除空目录?

我正在尝试使用 Python 3 创建一个函数来删除指定目录中的空目录。


不幸的是,我的尝试没有成功,所以我非常感谢任何帮助、指导和建议。


我试图让该函数执行的操作的示例:

前...


-folder/

    |-empty1/

    |-empty2/

    |-not_empty1/

        |-file

    |-not_empty2/

        |-file

后...


-folder/

    |-not_empty1/

        |-file

    |-not_empty2/

        |-file

这是我确信会起作用但没有起作用的:

# folder - absolute path to directory that may contain empty directories

def cleanup(folder):

    from os import listdir, rmdir, path

    ls = listdir(folder)

    ls = map(lambda f: path.join(folder, f), ls)

    folders = filter(lambda f: path.isdir(f), ls)

    map(lambda x: rmdir(x), folders)

谢谢!

编辑:

  1. 删除了第一个映射末尾的额外括号,用于使用语句list(map(...))进行调试print

  2. 已移至path.join()上方行path.isdir()

  3. 将问题的标题从“...FP 风格的 Python 3”更改为,因为正如评论中指出的那样,这不是 FP 的正确实现和应用。


MMTTMM
浏览 74回答 1
1回答

子衿沉夜

os.rmdir只删除空目录,因此在正确且最小的实现中,在功能风格中没有什么可做的:import errnoimport osdef cleanup(folder):    for name in os.listdir(folder):        try:            os.rmdir(os.path.join(folder, name))        except OSError as e:            if e.errno != errno.ENOTEMPTY:                raise
随时随地看视频慕课网APP

相关分类

Python
我要回答