我需要列出文件夹中包含目录路径的所有文件。我试图使用os.walk
,这显然是完美的解决方案。os.walk不带隐藏文件夹
但是,它也列出隐藏的文件夹和文件。我希望我的应用程序不要列出任何隐藏的文件夹或文件。有没有可以用来使其不产生任何隐藏文件的标志?
跨平台是不是我真的很重要,它的确定,如果它仅适用于Linux操作系统(。*模式)
我需要列出文件夹中包含目录路径的所有文件。我试图使用os.walk
,这显然是完美的解决方案。os.walk不带隐藏文件夹
但是,它也列出隐藏的文件夹和文件。我希望我的应用程序不要列出任何隐藏的文件夹或文件。有没有可以用来使其不产生任何隐藏文件的标志?
跨平台是不是我真的很重要,它的确定,如果它仅适用于Linux操作系统(。*模式)
没有,有没有选择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()
不会处理删除的目录。
当
topdown
是True
,调用者可以修改就地dirnames中列表(可能使用del
或切片分配):这仅如果保持
topdown
关键字参数True
,从documentation ofos.walk()
工作,并且walk()
只会递归到名称保持为dirnames的子目录中;这可以用来修剪搜索,施加特定的访问顺序,或者甚至在它再次恢复walk()
之前通知walk()
关于呼叫者创建或重命名的目录。
非常感谢,不知道你可以修改这个列表! – lolopop
我跑这个,但它没有打印任何东西到控制台。以这种方式显示文件的典型方法是什么?我在最后添加了“print root,dirs,files”,但它非常混乱。 – user5359531
@ user5359531:完全取决于您的用例;你可以'print'\ n'.join([os.path.join(root,f)for dirs + files])'等。 –
我意识到这不是在问问题,但我有我想要的地方都排除隐藏文件和文件__
开始,特别是__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)]
这是一个很好的答案,完美适用于根据列表排除 – jpwynn
仅供参考,'startswith'也可以带一个字符串元组,因此您可以摆脱inner for循环,只需使用'not dirname.startswith(exclude_prefixes)'https://docs.python.org/2/library/stdtypes .html#str.startswith(python 2.5及更高版本) –
什么平台是你吗? “隐藏”在不同的操作系统上有不同的含义。 –
我在Linux上,我会在答案中加上。 – lolopop