os.walk 没有隐藏文件夹
- 2024-10-29 08:34:00
- admin 原创
- 43
问题描述:
我需要列出文件夹内包含目录路径的所有文件。我尝试使用os.walk
,这显然是完美的解决方案。
但是,它还列出了隐藏的文件夹和文件。我希望我的应用程序不列出任何隐藏的文件夹或文件。有什么标志可以用来让它不产生任何隐藏文件吗?
跨平台对我来说并不重要,如果它只适用于 Linux 就没问题了(.* 模式)
解决方案 1:
不,没有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[:] =
切片分配;os.walk
递归遍历 中列出的子目录dirs
。通过将 的元素替换为满足条件的dirs
元素(例如,名称不以 开头的目录.
),os.walk()
将不会访问不符合条件的目录。
这仅当您保留topdown
关键字参数时才有效True
,来自的文档os.walk()
:
当
topdown
为 时True
,调用者可以就地修改 dirnames 列表(可能使用del
或切片分配),并且walk()
只会递归到名称保留在dirnames中的子目录;这可用于修剪搜索,施加特定的访问顺序,甚至在再次walk()
恢复之前告知调用者创建或重命名的目录walk()
。
解决方案 2:
我知道问题中没有问到这个问题,但我遇到了类似的问题,我想排除隐藏文件和以 开头的文件__
,特别是__pycache__
目录。我之所以想到这个问题,是因为我想弄清楚为什么我的列表推导没有达到我的预期。我没有用 修改列表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)]
解决方案 3:
我的用例与 OP 的用例类似,只是我想返回某个文件夹内子目录的总数。在我的例子中,我想省略任何命名的子目录.git
(以及可能嵌套在这些.git
文件夹中的任何文件夹)。
在 Python 3.6.7 中,我发现接受的答案的方法不起作用——它计算了所有.git
文件夹及其子文件夹。以下是对我有用的方法:
num_local_subdir = 0
for root, dirs, files in os.walk(local_folder_path):
if '.git' in dirs:
dirs.remove('.git')
num_local_subdir += (len(dirs))
解决方案 4:
另一种解决方案是允许您使用任何和映射函数跳过那些隐藏文件夹。
for root, dirs, files in os.walk(path):
if any(map(lambda p: p[0] == '.', dirs)):
continue
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件