如何使用 Python 列出目录中的文件

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将探索使用 Python 列出目录中文件的各种方法。无论你是初学者还是有经验的 Python 程序员,都将学习如何有效地管理系统上的文件和目录并与之交互。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/FileHandlingGroup -.-> python/file_opening_closing("Opening and Closing Files") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/FileHandlingGroup -.-> python/with_statement("Using with Statement") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/file_opening_closing -.-> lab-398037{{"如何使用 Python 列出目录中的文件"}} python/file_reading_writing -.-> lab-398037{{"如何使用 Python 列出目录中的文件"}} python/file_operations -.-> lab-398037{{"如何使用 Python 列出目录中的文件"}} python/with_statement -.-> lab-398037{{"如何使用 Python 列出目录中的文件"}} python/os_system -.-> lab-398037{{"如何使用 Python 列出目录中的文件"}} end

开始使用 Python 列出文件

Python 提供了几个内置函数和模块来与文件系统进行交互,包括列出文件和目录。用于此目的最常用的函数之一是 os.listdir()。此函数允许你获取指定目录内所有文件和目录的列表。

理解 os.listdir() 函数

os.listdir() 函数接受一个参数,即你要列出其内容的目录的路径。如果未提供路径,它将列出当前工作目录的内容。

以下是如何使用 os.listdir() 列出 /home/user/documents 目录中的文件和目录的示例:

import os

directory_path = '/home/user/documents'
file_list = os.listdir(directory_path)

for item in file_list:
    print(item)

这将输出 /home/user/documents 目录内所有文件和目录的列表。

处理错误和边界情况

在处理文件列表时,考虑错误处理和边界情况很重要。例如,如果指定的目录不存在,或者用户没有访问该目录的必要权限,os.listdir() 函数将引发 OSError 异常。

以下是如何处理此情况的示例:

import os

try:
    directory_path = '/path/to/non/existent/directory'
    file_list = os.listdir(directory_path)

    for item in file_list:
        print(item)
except OSError as e:
    print(f"Error: {e}")

在此示例中,如果目录 /path/to/non/existent/directory 不存在,os.listdir() 函数将引发 OSError,然后捕获该异常并打印到控制台。

通过了解 Python 中文件列表的基础知识,你可以开始探索更高级的技术,例如对结果进行过滤和排序,我们将在下一节中介绍。

使用 os.listdir() 函数列出文件

os.listdir() 函数是用于获取指定目录内文件和目录列表的强大工具。在本节中,我们将更深入地探讨此函数的用法和特性。

基本用法

要使用 os.listdir() 列出目录的内容,只需将目录路径作为参数传递:

import os

directory_path = '/home/user/documents'
file_list = os.listdir(directory_path)

for item in file_list:
    print(item)

这将输出 /home/user/documents 目录内所有文件和目录的列表。

处理相对路径

调用 os.listdir() 时也可以使用相对路径。例如,如果你想列出当前工作目录的内容,可以简单地传递空字符串或 . 字符:

import os

current_dir = os.listdir('.')
current_dir_alt = os.listdir('')

print("当前目录内容:")
for item in current_dir:
    print(item)

print("\n当前目录内容(另一种方式):")
for item in current_dir_alt:
    print(item)

这两个示例都会列出当前工作目录的内容。

对结果进行排序

默认情况下,os.listdir() 以任意顺序返回文件和目录列表。如果你需要对结果进行排序,可以使用内置的 sorted() 函数:

import os

directory_path = '/home/user/documents'
file_list = sorted(os.listdir(directory_path))

for item in file_list:
    print(item)

这将按字母顺序输出文件和目录列表。

过滤结果

在某些情况下,你可能希望过滤 os.listdir() 返回的结果,只包含某些类型的文件或目录。你可以通过列表推导式或 filter() 函数来实现:

import os

directory_path = '/home/user/documents'
only_directories = [item for item in os.listdir(directory_path) if os.path.isdir(os.path.join(directory_path, item))]
only_files = list(filter(lambda x: os.path.isfile(os.path.join(directory_path, x)), os.listdir(directory_path)))

print("目录:")
for item in only_directories:
    print(item)

print("\n文件:")
for item in only_files:
    print(item)

此示例会将 /home/user/documents 目录的内容分为两个列表:一个只包含目录,另一个只包含文件。

通过了解 os.listdir() 的基本用法和特性,你现在可以继续学习更高级的文件列出技术,我们将在下一节中介绍。

高级文件列表:过滤与排序

虽然 os.listdir() 函数提供了一种列出文件和目录的基本方法,但在很多情况下,你需要更高级的功能,比如对结果进行过滤和排序。在本节中,我们将探讨这些高级技术。

过滤文件列表

要过滤 os.listdir() 返回的结果,可以结合使用列表推导式以及 os.path.isfile()os.path.isdir() 函数。下面是一个分离文件和目录的示例:

import os

directory_path = '/home/user/documents'
files = [item for item in os.listdir(directory_path) if os.path.isfile(os.path.join(directory_path, item))]
directories = [item for item in os.listdir(directory_path) if os.path.isdir(os.path.join(directory_path, item))]

print("文件:")
for file in files:
    print(file)

print("\n目录:")
for directory in directories:
    print(directory)

这将输出两个列表:一个只包含 /home/user/documents 目录中的文件,另一个只包含该目录中的目录。

你可以通过检查特定的文件扩展名或其他属性来进一步细化过滤条件:

import os

directory_path = '/home/user/documents'
python_files = [item for item in os.listdir(directory_path) if item.endswith('.py')]
large_files = [item for item in os.listdir(directory_path) if os.path.getsize(os.path.join(directory_path, item)) > 1024 * 1024]  ## 大于1MB的文件

print("Python文件:")
for file in python_files:
    print(file)

print("\n大文件:")
for file in large_files:
    print(file)

此示例将目录内容过滤为只包含Python文件和大于1MB的文件。

对文件列表进行排序

要对 os.listdir() 返回的结果进行排序,可以使用内置的 sorted() 函数。默认情况下,sorted() 将按字母顺序对项目进行排序,但你也可以提供一个自定义的排序键函数:

import os
from datetime import datetime

directory_path = '/home/user/documents'
file_list = os.listdir(directory_path)

## 按文件名排序(字母顺序)
sorted_by_name = sorted(file_list)
print("按名称排序:")
for item in sorted_by_name:
    print(item)

## 按文件修改时间排序(最新的在前)
sorted_by_time = sorted(file_list, key=lambda x: os.path.getmtime(os.path.join(directory_path, x)), reverse=True)
print("\n按修改时间排序(最新的在前):")
for item in sorted_by_time:
    print(item)

在这个示例中,第一种排序方法使用默认的字母顺序排序,而第二种排序方法使用文件修改时间作为排序键,最新的文件排在前面。

通过结合过滤和排序技术,你可以创建满足特定需求的强大文件列表实用工具。

总结

在本教程结束时,你将对如何使用Python列出目录中的文件有扎实的理解。你将学习 os.listdir() 函数的基础知识,以及过滤和排序文件列表的更高级技术。这些知识将使你能够简化Python文件管理任务并提升你的整体编程技能。