如何在 Windows 中使用 Python 列出非隐藏文件和目录?


当在 Windows 环境中使用 Python 处理文件和目录操作时,遇到隐藏文件和目录并不少见。这些隐藏文件和文件夹通常是系统文件,并且有意地隐藏在用户视线之外。其中,您可能会发现配置文件、那些短暂的临时文件以及一系列与系统相关的数据。但是,在大多数情况下,您可能只需要列出非隐藏文件和目录,以避免混乱并专注于相关数据。

准备好踏上这篇包罗万象的文章之旅。前方将探索各种技术,每种技术都针对编目非隐藏文件和目录的任务。请放心,我们的指导包含分步说明和代码片段,照亮您的路径。无论您偏爱“os”模块的实用魅力、 “pathlib”模块的实用性,还是第三方库的创造力,我们都能满足您的需求。在您完成学习后,您将能够熟练地协调在目录中提取那些未隐藏文件的无缝过程。

让我们开始这段使用 Python 进行文件处理的旅程,并学习如何在 Windows 中列出非隐藏文件和目录!

使用 os.listdir() 列出非隐藏文件和目录

Python 中的“os”模块提供了“os.listdir()”函数,它允许我们获取给定目录中项目(文件和目录)的列表。我们可以将此函数与“os.path”函数结合使用,以过滤掉隐藏项目并仅列出非隐藏文件和目录。

示例

  • 在下面的代码中,我们导入了“os”模块,该模块提供了与操作系统交互的函数,包括文件和目录操作。

  • “list_non_hidden_files_and_dirs_with_os_listdir()”函数以“directory”作为输入,并返回两个列表:一个包含非隐藏文件,另一个包含非隐藏目录。

  • 我们使用“os.listdir(directory)”获取指定目录中项目(文件和目录)的列表。

  • 我们使用列表推导式从原始列表中过滤掉以点开头(表示隐藏项目)的项目,从而获得“non_hidden_items”列表。

  • 然后,我们再次使用列表推导式将“non_hidden_items”进一步过滤成非隐藏文件 (“non_hidden_files”) 和非隐藏目录 (“non_hidden_dirs”) 的单独列表。

  • 要检查项目是文件还是目录,我们分别使用“os.path.isfile(os.path.join(directory, item))”和“os.path.isdir(os.path.join(directory, item))”。

import os

def list_non_hidden_files_and_dirs_with_os_listdir(directory):
    non_hidden_items = [item for item in os.listdir(directory) if not item.startswith('.')]
    non_hidden_files = [item for item in non_hidden_items if os.path.isfile(os.path.join(directory, item))]
    non_hidden_dirs = [item for item in non_hidden_items if os.path.isdir(os.path.join(directory, item))]
    return non_hidden_files, non_hidden_dirs

使用 pathlib.Path.iterdir() 列出非隐藏文件和目录

“pathlib”模块提供了一种更现代、面向对象的方式来处理文件路径。我们可以利用“Path.iterdir()”有效地列出非隐藏文件和目录。

示例

  • 在此示例中,我们从“pathlib”模块导入“Path”类,该类表示文件系统路径。

  • “list_non_hidden_files_and_dirs_with_pathlib_iterdir()”函数以“directory”作为输入,并返回两个列表:一个包含非隐藏文件,另一个包含非隐藏目录。

  • 我们使用“Path(directory)”创建一个“Path”对象来表示输入目录。

  • 我们使用列表推导式从“path_object.iterdir()”迭代器中过滤掉以点开头(表示隐藏项目)的项目,从而获得“non_hidden_items”列表。

  • 然后,我们再次使用列表推导式将“non_hidden_items”进一步过滤成非隐藏文件 (“non_hidden_files”) 和非隐藏目录 (“non_hidden_dirs”) 的单独列表。

  • 要检查项目是文件还是目录,我们分别使用“item.is_file()”和“item.is_dir()”。

from pathlib import Path

def list_non_hidden_files_and_dirs_with_pathlib_iterdir(directory):
    path_object = Path(directory)
    non_hidden_items = [item for item in path_object.iterdir() if not item.name.startswith('.')]
    non_hidden_files = [item for item in non_hidden_items if item.is_file()]
    non_hidden_dirs = [item for item in non_hidden_items if item.is_dir()]
    return non_hidden_files, non_hidden_dirs

使用 os.scandir() 列出非隐藏文件和目录

“os.scandir()”函数是获取目录内容的比“os.listdir()”更有效的替代方案。我们可以将“os.scandir()”与“os.path”函数结合使用来列出非隐藏文件和目录。

示例

  • 在此示例中,我们使用“os.scandir()”函数以及“os.path”函数来列出非隐藏文件和目录。

  • “list_non_hidden_files_and_dirs_with_os_scandir()”函数以“directory”作为输入,并返回两个列表:一个包含非隐藏文件,另一个包含非隐藏目录。

  • 我们使用“with os.scandir(directory) as entries”获取指定目录中条目(文件和目录)的迭代器。

  • 我们使用列表推导式从“entries”迭代器中过滤掉以点开头(表示隐藏项目)的条目,从而获得“non_hidden_items”列表。

  • 然后,我们再次使用列表推导式将“non_hidden_items”进一步过滤成非隐藏文件 (“non_hidden_files”) 和非隐藏目录 (“non_hidden_dirs”) 的单独列表。

  • 要检查项目是文件还是目录,我们分别使用“os.path.isfile(os.path.join(directory, item))”和“os.path.isdir(os.path.join(directory, item))”。

import os

def list_non_hidden_files_and_dirs_with_os_scandir(directory):
    with os.scandir(directory) as entries:
        non_hidden_items = [entry.name for entry in entries if not entry.name.startswith('.')]
    non_hidden_files = [item for item in non_hidden_items if os.path.isfile(os.path.join(directory, item))]
    non_hidden_dirs = [item for item in non_hidden_items if os.path.isdir(os.path.join(directory, item))]
    return non_hidden_files, non_hidden_dirs

使用 pathlib.Path.glob() 列出非隐藏文件和目录

“pathlib”模块的“Path.glob()”方法允许我们在目录中对文件名执行模式匹配。我们可以使用“Path.glob()”以简洁的方式列出非隐藏文件和目录。

示例

  • 在此示例中,我们从“pathlib”模块导入“Path”类,并使用“Path.glob()”列出非隐藏文件和目录。

  • “list_non_hidden_files_and_dirs_with_pathlib_glob()”函数以“directory”作为输入,并返回两个列表:一个包含非隐藏文件,另一个包含非隐藏目录。

  • 我们使用“Path(directory)”创建一个“Path”对象来表示输入目录。

  • 我们使用列表推导式从“path_object.glob('*')”生成器中过滤掉以点开头(表示隐藏项目)的项目,从而获得“non_hidden_items”列表。

  • 然后,我们再次使用列表推导式将“non_hidden_items”进一步过滤成非隐藏文件 (“non_hidden_files”) 和非隐藏目录 (“non_hidden_dirs”) 的单独列表。

  • 要检查项目是文件还是目录,我们分别使用“item.is_file()”和“item.is_dir()”。

from pathlib import Path

def list_non_hidden_files_and_dirs_with_pathlib_glob(directory):
    path_object = Path(directory)
    non_hidden_items = [item for item in path_object.glob('*') if not item.name.startswith('.')]
    non_hidden_files = [item for item in non_hidden_items if item.is_file()]
    non_hidden_dirs = [item for item in non_hidden_items if item.is_dir()]
    return non_hidden_files, non_hidden_dirs

使用 os.walk() 列出非隐藏文件和目录

“os.walk()”函数允许我们遍历目录及其子目录。我们可以将“os.walk()”与“os.path”函数结合使用,以递归方式列出非隐藏文件和目录。

示例

  • 在此示例中,我们结合使用“os.walk()”和“os.path”函数来列出非隐藏文件和目录。

  • “list_non_hidden_files_and_dirs_with_os_walk()”函数以“directory”作为输入,并返回两个列表:一个包含非隐藏文件,另一个包含非隐藏目录。

  • 我们初始化“non_hidden_files”和“non_hidden_dirs”的空列表以存储非隐藏项目。

  • 我们使用“os.walk(directory)”遍历目录及其子目录。对于每次迭代,我们获取“root”目录、一个“dirs”(目录)列表以及当前目录中的“files”列表。

  • 我们使用列表推导式过滤掉以点开头(表示隐藏项目)的文件和目录,然后扩展相应的“non_hidden_files”和“non_hidden_dirs”列表。

import os

def list_non_hidden_files_and_dirs_with_os_walk(directory):
    non_hidden_files = []
    non_hidden_dirs = []
    for root, dirs, files in os.walk(directory):
        non_hidden_files.extend([os.path.join(root, f) for f in files if not f.startswith('.')])
        non_hidden_dirs.extend([os.path.join(root, d) for d in dirs if not d.startswith('.')])
    return non_hidden_files, non_hidden_dirs

总之,通过仅列出非隐藏实体,可以使用 Python 更有效、更专注地处理 Windows 中的文件和目录。通过使用各种技术,例如“os.listdir()”、“pathlib.Path.iterdir()”、“os.scandir()”、“pathlib.Path.glob()”和“os.walk()”,您可以轻松过滤掉隐藏文件和目录,并检索所需的相关信息。

在本文中,我们探索了几种在 Windows 中列出非隐藏文件和目录的不同方法。我们详细讨论了每种方法,并提供了分步说明和代码示例以方便您理解。无论您偏爱“os.listdir()”的简单性还是“pathlib”的现代方法,您现在都拥有了一系列可供使用的技术。

您必须始终记住考虑您的具体用例,并选择最适合您需求的方法。无论您是处理单个目录还是具有子目录的复杂目录结构,Python 都提供通用的工具来有效地列出非隐藏文件和目录。

更新于: 2023年9月11日

1K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告