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


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

准备好开始阅读这篇全面的文章吧!接下来,我们将探索各种技术,每种技术都针对列出非隐藏文件和目录的任务。请放心,我们的指导包含分步说明和代码片段,以阐明您的思路。无论您偏好“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日

1000+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告