如何使用os.listdir()忽略隐藏文件?

2024-03-29 10:45:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python脚本执行一个os.listdir(path),其中路径是一个队列,其中包含我需要逐个处理的存档。

问题是,我得到一个数组中的列表,然后做一个简单的array.pop(0)。在我把这个项目置于颠覆状态之前,一切都很顺利。现在我得到了数组中的.svn文件夹,当然这会使我的应用程序崩溃。

所以我的问题是:在执行os.listdir()时是否存在忽略隐藏文件的现有函数,如果没有,最好的方法是什么?

谢谢你。


Tags: path项目路径脚本文件夹应用程序列表队列
3条回答

这是一个老问题,但似乎缺少使用列表理解的明显答案,所以我在这里添加它是为了完整性:

[f for f in os.listdir(path) if not f.startswith('.')]

另外,文档状态listdir将以“任意顺序”返回结果,但常见的用例是按字母顺序排序。如果希望目录内容按字母顺序排序而不考虑大小写,可以使用:

sorted([f for f in os.listdir('./')], key=lambda f: f.lower())

你可以自己写:

def listdir_nohidden(path):
    for f in os.listdir(path):
        if not f.startswith('.'):
            yield f

或者可以使用glob

def listdir_nohidden(path):
    return glob.glob(os.path.join(path, '*'))

其中任何一个都将忽略以'.'开头的所有文件名。

在Windows、Linux和OS X上:

if os.name == 'nt':
    import win32api, win32con


def folder_is_hidden(p):
    if os.name== 'nt':
        attribute = win32api.GetFileAttributes(p)
        return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
    else:
        return p.startswith('.') #linux-osx

相关问题 更多 >