首页 > 解决方案 > 使用 os.path.isfile() 删除目录

问题描述

我正在尝试创建一个函数,该函数从目录中创建所有文件和目录的列表。然后该函数将删除所有以目录开头的文件~并删除所有目录。我相信我以某种方式os.path.isfile()错误地使用了该函数,因为当我将其设置为 True 时,我得到一个没有任何内容的列表,当我将其设置为 false 时,我得到一个删除~文件但保留目录的列表。

def getfiles(directory):
    New_List = []
    List1 = os.listdir(directory)
    for i in List1:
        if str.startswith(i,"~") is False and os.path.isfile(i) is True:
            New_List.append(directory+"/"+i)  
    return New_List

标签: python

解决方案


这是标准库模块的替代方案pathlib(尽管它需要 Python 3.4+):

from pathlib import Path

def getfiles(directory):
    return [o for o in Path(directory).rglob('~*') if o.isfile()]

如果您想删除这些文件:

from pathlib import Path

for o in Path(directory).rglob('~*'):
    if o.isfile():
        o.unlink(missing_ok=True)

或者,使用getfiles()我们上面定义的:

for o in getfiles(directory):
    o.unlink(missing_ok=True)

全部使用纯 Python 并使用标准库。

这两个示例都将扫描directory 及其子目录以查找名称以 . 开头的文件~。如果您只想扫描directory,请替换rglobglob.


推荐阅读