Python 目录管理概述

在本教程中,您将学习 Python 中的文件与目录管理操作,包括创建目录、重命名、列出内容以及遍历目录树等常用方法。

目录结构基础

如果 Python 程序需要处理大量文件,我们可以将代码和资源安排在不同的目录中,以使项目更易于管理。

目录(Directory)或文件夹(Folder)是文件和子目录的集合。Python 的标准库 os 模块为我们提供了许多用于操作目录和文件的实用方法。

    • *

获取当前目录

我们可以使用 os 模块的 getcwd() 方法来获取当前的工作目录(Current Working Directory)。

此方法以字符串形式返回当前工作目录的路径。此外,还可以使用 getcwdb() 方法将其作为字节对象(bytes object)获取。

>>> import os

>>> os.getcwd()
'C:\\Program Files\\PyScripter'

>>> os.getcwdb()
b'C:\\Program Files\\PyScripter'

输出中多余的反斜杠表示转义序列。在使用 print() 函数输出时,路径会被正确渲染。

>>> print(os.getcwd())
C:\Program Files\PyScripter
    • *

变更目录

我们可以使用 chdir() 方法更改当前工作目录。

目标路径必须作为字符串传递给此方法。在路径中,我们可以使用正斜杠 / 或反斜杠 \ 来分隔路径元素。

需要注意的是,在 Windows 系统中使用反斜杠时,建议使用双反斜杠 \\ 或原始字符串以避免转义序列问题。

>>> os.chdir('C:\\Python33')

>>> print(os.getcwd())
C:\Python33
    • *

列出目录和文件

使用 listdir() 方法可以检索指定目录中的所有文件和子目录名称。

此方法接受一个路径参数,返回该路径下的子目录和文件列表。如果未指定路径,它将返回当前工作目录中的内容列表。

>>> print(os.getcwd())
C:\Python33

>>> os.listdir()
['DLLs',
 'Doc',
 'include',
 'Lib',
 'libs',
 'LICENSE.txt',
 'NEWS.txt',
 'python.exe',
 'pythonw.exe',
 'README.txt',
 'Scripts',
 'tcl',
 'Tools']

>>> os.listdir('G:\\')
['$RECYCLE.BIN',
 'Movies',
 'Music',
 'Photos',
 'Series',
 'System Volume Information']
    • *

创建新目录

我们可以使用 mkdir() 方法创建一个新的目录。

此方法接受新目录的路径作为参数。如果未指定完整路径(即相对路径),则会在当前工作目录中创建新目录。

>>> os.mkdir('test')

>>> os.listdir()
['test']
    • *

重命名目录或文件

rename() 方法可用于重命名目录或文件。

重命名时,rename() 方法需要两个基本参数:第一个参数为旧名称(或旧路径),第二个参数为新名称(或新路径)。

>>> os.listdir()
['test']

>>> os.rename('test', 'new_one')

>>> os.listdir()
['new_one']
    • *

删除目录或文件

可以使用 remove() 方法删除(移除)文件。

同样,rmdir() 方法可用于删除一个空目录

>>> os.listdir()
['new_one', 'old.txt']

>>> os.remove('old.txt')
>>> os.listdir()
['new_one']

>>> os.rmdir('new_one')
>>> os.listdir()
[]

注意rmdir() 方法只能删除空目录。若要删除非空目录(即包含文件的目录),可以使用 shutil 模块中的 rmtree() 方法。

>>> os.listdir()
['test']

>>> os.rmdir('test')
Traceback (most recent call last):
  ...
OSError: [WinError 145] The directory is not empty: 'test'

>>> import shutil

>>> shutil.rmtree('test')
>>> os.listdir()
[]
    • *

遍历目录树

可以使用 walk() 方法遍历目录树下的所有文件。

os.walk() 函数返回一个生成器对象(generator object)。通过该生成器,可以获取给定文件层次结构中每个目录的信息元组。

每个元组包含三个元素:

  1. 当前目录的路径(字符串类型)。
  2. 当前目录下的子目录名称列表(列表类型)。
  3. 当前目录下的文件名称列表(列表类型)。

以下是目录树的示例结构:

目录树

让我们对 test 目录传递 os.walk() 函数进行遍历:

>>> for i in os.walk('/home/pl/test'):
...     print(i)
... 
('/home/pl/test', ['cgi-bin'], ['dgs.png', 'index.html'])
('/home/pl/test/cgi-bin', ['backup', 'another'], ['hello.py'])
('/home/pl/test/cgi-bin/backup', [], [])
('/home/pl/test/cgi-bin/another', [], ['data.txt'])
    • *

说明:本文示例基于 Python 3 环境编写,代码在 Windows 与 Linux 路径处理上可能略有差异。虽然 os 模块依然广泛使用,但在现代 Python 开发中,推荐使用 pathlib 模块进行更面向对象的路径操作。