没有隐藏文件夹的os.walk

我需要在文件夹中列出包含目录path的所有文件。 我试图使用os.walk ,这显然是完美的解决scheme。

但是,它也列出隐藏的文件夹和文件。 我想我的应用程序不列出任何隐藏的文件夹或文件。 有没有任何标志可以使它不产生任何隐藏的文件?

跨平台对我来说并不重要,如果它只适用于linux(。*模式)

Solutions Collecting From Web of "没有隐藏文件夹的os.walk"

不,没有选择os.walk()会跳过这些。 你需要自己做(这很容易):

 for root, dirs, files in os.walk(path): files = [f for f in files if not f[0] == '.'] dirs[:] = [d for d in dirs if not d[0] == '.'] # use files and dirs 

注意dirs[:] =切片分配; 我们正在替换dirs元素 (而不是dirs引用的列表),以便os.walk()不会处理已删除的目录。

这只适用于从os.walk()的文档中将topdown关键字参数保持为True

topdownTrue ,调用者可以就地修改dirnames列表(也许使用del或slice赋值),而walk()只会递归到名称保持dirnames的子目录中; 这可以用来修剪搜索,强制访问的特定顺序,甚至可以在再次恢复walk()之前通知walk()关于调用者创建或重命名的目录。

我意识到这个问题没有问,但我有一个类似的问题,我想排除隐藏的文件和以__开头的文件,特别是__pycache__目录。 我着手解决这个问题,因为我试图弄清楚为什么我的列表理解不符合我的预期。 我没有用dirnames[:]修改这个列表。

我创建了一个我想排除的前缀列表,并像这样修改了dirnames:

  exclude_prefixes = ('__', '.') # exclusion prefixes for dirpath, dirnames, filenames in os.walk(node): # exclude all dirs starting with exclude_prefixes dirnames[:] = [dirname for dirname in dirnames if not dirname.startswith(exclude_prefixes)]