Skip to main content

Python IO 编程

Python 操作文件和目录

本章节主要讲解 Python 对文件和目录的操作,创建和删除目录,遍历目录,删除非空目录,复制和移动,路径操作,使用os.path处理路径,使用pathlib处理路径,环境变量操作,获取环境变量,设置和删除环境变量,异常处理,实用技巧,获取当前工作目录,检查文件类型,获取文件信息。

1. 文件和目录操作

Python的os模块提供了丰富的目录操作功能,如创建、删除和遍历目录。

1.1 创建和删除目录

使用os.mkdir()创建单级目录,os.makedirs()创建多级目录,os.rmdir()删除空目录。

import os

# 创建单级目录
os.mkdir('new_folder')

# 创建多级目录
os.makedirs('parent/child/grandchild', exist_ok=True)

# 删除空目录
os.rmdir('new_folder')

说明exist_ok=True避免目录已存在时的错误。os.rmdir()只能删除空目录。

1.2 遍历目录

使用os.listdir()列出目录内容,os.walk()递归遍历目录树。

import os

# 列出目录内容
print(os.listdir('.'))  # 当前目录下的文件和文件夹

# 递归遍历目录
for root, dirs, files in os.walk('.'):
    print(f'当前目录: {root}')
    print(f'子目录: {dirs}')
    print(f'文件: {files}')
    print('-' * 80)

说明os.walk()返回三元组:当前目录路径、子目录列表和文件列表,适合处理复杂目录结构。

1.3 删除非空目录

使用shutil模块删除包含文件的目录。

import shutil

# 删除非空目录
shutil.rmtree('parent', ignore_errors=True)

说明ignore_errors=True忽略删除时的错误,如目录不存在。

1.4 复制和移动

shutil支持文件和目录的复制与移动。

import shutil

# 复制文件
shutil.copy('example.txt', 'example_copy.txt')

# 复制目录
shutil.copytree('parent', 'parent_copy', dirs_exist_ok=True)

# 移动文件或目录
shutil.move('example_copy.txt', 'parent/example_copy.txt')

说明dirs_exist_ok=True允许目标目录已存在,适用于Python 3.8+。

2. 路径操作

os.pathpathlib模块提供路径处理功能,pathlib更现代化,推荐使用。

2.1 使用os.path处理路径

os.path提供路径拼接、分解等功能。

import os

# 拼接路径
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)

# 获取文件名和目录
print(os.path.basename(path))  # file.txt
print(os.path.dirname(path))   # folder/subfolder

# 检查路径是否存在
print(os.path.exists('example.txt'))

说明os.path.join()根据操作系统自动处理路径分隔符(Windows用\\,Unix用/)。

2.2 使用pathlib处理路径

pathlib提供面向对象的路径操作,代码更简洁。

from pathlib import Path

# 创建Path对象
path = Path('folder') / 'subfolder' / 'file.txt'

# 获取文件名和父目录
print(path.name)       # file.txt
print(path.parent)     # folder/subfolder

# 检查文件是否存在
print(path.exists())

# 创建目录
path.parent.mkdir(parents=True, exist_ok=True)

说明pathlib使用/操作符拼接路径,跨平台兼容,parents=True支持创建多级目录。

3. 环境变量操作

环境变量是操作系统级别的键值对,Python通过os模块访问和修改。

3.1 获取环境变量

使用os.environ获取环境变量。

import os

# 获取单个环境变量
print(os.environ.get('PATH'))

# 获取所有环境变量
for key, value in os.environ.items():
    print(f'{key}: {value}')

说明os.environ.get()返回None如果变量不存在,避免KeyError。

3.2 设置和删除环境变量

修改环境变量只影响当前程序的运行时环境。

import os

# 设置环境变量
os.environ['MY_VAR'] = 'my_value'
print(os.environ.get('MY_VAR'))  # my_value

# 删除环境变量
del os.environ['MY_VAR']
print(os.environ.get('MY_VAR'))  # None

说明:环境变量修改仅在当前进程有效,不会影响系统全局环境。

4. 异常处理

文件和目录操作可能因权限、文件不存在等原因抛出异常,需妥善处理。

import os

try:
    with open('nonexistent.txt', 'r', encoding='utf-8') as file:
        content = file.read()
except FileNotFoundError:
    print('文件不存在!')
except PermissionError:
    print('无权限访问文件!')
except Exception as e:
    print(f'发生错误: {e}')

说明:捕获具体异常(如FileNotFoundError)提高代码健壮性,通用Exception捕获其他未预料错误。

5. 实用技巧

5.1 获取当前工作目录

使用ospathlib获取和更改当前工作目录。

import os
from pathlib import Path

# 获取当前工作目录
print(os.getcwd())
print(Path.cwd())

# 更改当前工作目录
os.chdir('parent')
print(os.getcwd())

5.2 检查文件类型

判断路径是文件还是目录。

from pathlib import Path

path = Path('example.txt')
print(path.is_file())   # True if file exists
print(path.is_dir())    # True if directory exists

5.3 获取文件信息

查看文件大小、修改时间等。

import os
from datetime import datetime

# 获取文件信息
stats = os.stat('example.txt')
print(f'文件大小: {stats.st_size} 字节')
print(f'最后修改时间: {datetime.fromtimestamp(stats.st_mtime)}')

说明os.stat()返回文件元数据,datetime.fromtimestamp()将时间戳转换为可读时间。