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)
| 归档时间: |
|
| 查看次数: |
18524 次 |
| 最近记录: |