lol*_*pop 33 python linux os.walk
我需要列出文件夹中包含目录路径的所有文件.我尝试使用os.walk
,这显然是完美的解决方案.
但是,它还列出了隐藏的文件夹和文件.我希望我的应用程序不要列出任何隐藏的文件夹或文件.是否有任何标志可以用来使它不产生任何隐藏文件?
跨平台对我来说并不重要,只要它适用于linux(.*pattern)就可以了.
Mar*_*ers 80
不,没有选择可以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
Run Code Online (Sandbox Code Playgroud)
注意dirs[:] =
切片分配; os.walk
递归遍历中列出的子目录dirs
.通过更换元件的dirs
与那些满足条件(例如,目录名称不开始.
),os.walk()
将不能访问不符合标准的目录.
这仅适用于保留topdown
关键字参数True
的文档os.walk()
:
如果
topdown
是True
,调用者可以修改就地dirnames中列表(可能使用del
或切片分配),并且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)]
Run Code Online (Sandbox Code Playgroud)