文件和文件夹操作

PythonBeginner
立即练习

介绍

本实验旨在帮助你理解如何使用 Python 操作文件和文件夹。我们将使用 osglob 模块,这些模块提供了与文件系统交互的方式,并执行常见的操作,如创建、删除和移动文件及目录。

学习目标

  • os 模块
  • glob 模块

创建文件夹和文件

以下是一些用于创建多组示例文件夹和文件的 Python 代码:

import os

## 创建多组示例文件夹和文件
for i in range(3):
    ## 为每组创建一个新文件夹
    folder_name = "group_" + str(i)
    os.makedirs(folder_name)

    ## 在每个文件夹中创建示例文件
    for j in range(3):
        file_name = "file_" + str(j) + ".txt"
        file_path = os.path.join(folder_name, file_name)
        with open(file_path, "w") as file:
            file.write("This is a sample file.")

你可以在编辑器中打开 create_samples.py 并运行代码以查看结果。

os.makedirs(path) 是 Python 中 os 模块的一个函数,用于在指定路径创建目录。在本例中,pathfolder_name,它通过将字符串 "group_" 与外层 for 循环中 i 变量的当前值连接而成,结果为 "group_0"、"group_1" 和 "group_2"。

os.path.join(path1, path2, ...)os.path 模块中的一个函数,用于将一个或多个路径连接在一起。在本例中,path1folder_namepath2file_name,它通过将字符串 "file_" 与内层 for 循环中 j 变量的当前值连接而成,结果为 "file_0.txt"、"file_1.txt" 和 "file_2.txt"。os.path.join() 函数用于连接文件夹名称和文件名称,以创建完整的文件路径,从而可以在文件夹内创建文件。

通过使用 os.path.join 函数,代码确保无论代码是在 Windows、Linux 还是 macOS 上运行,都能使用当前操作系统的正确分隔符来连接文件夹和文件名称。

深入了解 Os 模块

Python 中的 os 模块提供了一种与操作系统交互的方式,允许你执行各种任务,例如创建和删除目录、读取和写入文件以及执行命令。

打开一个新的 Python 解释器。

python3

以下是 os 模块提供的其他一些有用函数的示例:

  • os.listdir(path):返回指定目录中所有文件和目录的列表。

    os.listdir('.') ## 返回当前目录中所有文件和目录的列表
  • os.remove(path):删除指定路径的文件。

    os.remove('file.txt') ## 删除名为 'file.txt' 的文件
  • os.rmdir(path):删除指定路径的空目录。

    os.rmdir('folder') ## 删除名为 'folder' 的空文件夹
  • os.rename(src, dst):将文件或目录从 src 路径重命名为 dst 路径。

    os.rename('file1.txt', 'file2.txt') ## 将文件 'file1.txt' 重命名为 'file2.txt'
  • os.chdir(path):将当前工作目录更改为指定路径。

    os.chdir('/home/user/documents') ## 将当前工作目录更改为 '/home/user/documents'
  • os.getcwd():返回当前工作目录。

    os.getcwd() ## 返回当前工作目录,例如 '/home/user/documents'

请注意,如果指定的文件或目录不存在,或者你没有必要的权限,上述大多数函数都会引发异常(例如 FileNotFoundErrorOSError 等)。

遍历目录树

os.walk(top, topdown=True, onerror=None, followlinks=False) 是 Python 中 os 模块的一个函数,通过遍历目录树(从上到下或从下到上)生成目录树中的文件名。默认情况下,os.walk() 以从上到下的方式生成目录树中的文件名。对于以目录 top 为根的树中的每个目录(包括 top 本身),它会生成一个三元组 (dirpath, dirnames, filenames)

以下是一个示例,展示如何使用 os.walk() 打印目录及其子目录中的所有文件:

import os

## 打印目录及其子目录中的所有文件
for root, dirs, files in os.walk('.'):
    for file in files:
        print(os.path.join(root, file))

这段代码将从当前目录(用 '.' 表示)开始,递归遍历所有子目录,并打印遇到的每个文件的完整路径。

以下是另一个示例,展示如何使用 os.walk() 在目录中搜索具有特定扩展名的文件:

import os

def search_file(directory, file_extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(file_extension):
                print(os.path.join(root, file))

search_file('.','.txt')

这段代码将查找所有扩展名为 .txt 的文件,并打印这些文件的完整路径。

os.walk() 是一个功能强大的函数,可用于许多任务,例如搜索文件、分析目录结构等。

值得注意的是,os.walk 是一个生成器(generator),这意味着它会动态生成值,而不是将所有值保存在内存中。这使得它在处理大型目录树时非常高效。

Glob 模块

Python 中的 glob 模块提供了一种使用通配符搜索文件和目录的方式。glob.glob(pathname) 返回与指定路径名模式匹配的文件路径列表。

以下是一个示例,展示如何使用 glob.glob() 查找当前目录中所有扩展名为 ".txt" 的文件:

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

这段代码将搜索当前目录中所有扩展名为 ".txt" 的文件,并返回与模式匹配的文件路径列表。

它与 os.walk() 函数类似,但不会递归搜索子目录。它只会在当前目录中查找与指定模式匹配的文件。

以下是一个示例,展示如何使用 glob.glob() 查找所有子目录中扩展名为 ".txt" 的文件:

import glob

txt_files = glob.glob('**/*.txt', recursive=True)
print(txt_files)

这段代码将搜索当前目录及其所有子目录中扩展名为 ".txt" 的文件。

通常,当你只需要在一个目录及其子目录中查找文件时,glob.glob() 更加方便。然而,os.walk() 更强大且灵活,因为它可以用于在多个目录中搜索文件或分析目录树的结构。

值得注意的是,与 os.walk 类似,glob 也是一个生成器(generator),这意味着它会动态生成值,而不是将所有值保存在内存中。这使得它在处理大量文件时非常高效。

总结

在本实验中,我们学习了如何使用 Python 通过 osglob 模块操作文件和文件夹。我们涵盖了如何创建新文件夹、更改当前工作目录、创建新文件、写入文件、关闭文件、列出目录内容以及使用 glob 查找符合特定模式的文件。