Python 文件与目录操作实战指南

纸上星河
纸上星河
发布时间:2026-10-12| 3人浏览过
原创

本文系统讲解 Python 中文件与目录的底层操作方法,涵盖 os 与 shutil 核心模块的路径解析、权限检测、多模式读写及文件夹迁移。结合批量重命名图片的真实场景,提供可执行代码与安全操作规范,帮助开发者高效处理本地文件系统任务。

一、准备环境:导入基础模块

Python 标准库内置了强大的文件系统处理能力。编写相关脚本前,需引入以下两个核心模块:

import os
import shutil

二、路径检测与信息提取(os 模块)

在实际开发中,首先需确认目标位置是否存在且类型符合预期。以下函数常用于运行前的校验与环境适配:

  • 当前工作目录:os.getcwd() 返回脚本运行的绝对路径。
  • 路径组件拆分:os.path.split('D:/data/report.txt') 结果为 ('D:/data', 'report.txt')。
  • 扩展名分离:os.path.splitext('image.png') 返回 ('image', '.png')。
  • 存在性与类型判断:os.path.exists(path) 检查完整路径;os.path.isfile(path) 与 os.path.isdir(path) 分别验证是否为文件或目录。

其他平台相关参数如 os.linesep(行终止符,Windows为' ',Linux为' ')、os.name(平台标识,'nt'表示Windows,'posix'表示类Unix)可用于跨平台逻辑兼容。获取文件元数据可通过 os.stat(file),文件大小查询使用 os.path.getsize(filename)。

三、文件读取、写入与光标定位

打开文件是数据处理的第一步。使用 open() 时需严格指定模式,否则可能导致数据丢失或乱码:

# 文本模式:w(覆盖写)、a(追加写)、r+(读写,不创建新文件)
# 二进制模式:rb(读)、wb(写)、ab(追加),适用于图片、音视频等

获取文件对象 fp 后,常用操作如下:

  • fp.read(size):一次性读取指定字节数(文本模式下按字符计)。
  • fp.readline():读取单行内容。配合 for line in fp: 可实现逐行遍历(Python 3 推荐写法,替代旧版 fp.next())。
  • fp.readlines():将全部行装入列表返回。
  • fp.write(str) / fp.writelines(seq):写入字符串或可迭代序列。注意不会自动添加换行符。
  • fp.seek(offset, whence):移动读写指针。whence=0从头算,1从当前位置,2从末尾。以 a/a+ 模式打开的文件每次写入后指针会自动跳至末尾。
  • fp.truncate([size]):截断文件。默认截断至当前指针位置,超出原长度则补零。

所有操作完成后务必调用 fp.close() 或推荐使用 with open(...) as fp: 上下文管理器,防止资源泄露。对已关闭文件继续读写会触发 ValueError。

四、目录管理与安全清理(shutil 模块)

【风险提示】目录删除与覆盖操作不可逆,涉及生产数据前请务必完成备份,或在测试环境中先行验证。

  • 创建与切换:os.mkdir("dir") 创建单层目录;os.makedirs("a/b/c") 级联创建。os.chdir("path") 更改当前工作路径。
  • 文件/文件夹复制:shutil.copyfile("src", "dst") 仅支持文件拷贝;shutil.copy("src", "dst_dir") 可拷贝文件至目标目录或重命名;shutil.copytree("src_dir", "dst_dir") 递归复制整个文件夹,要求 dst_dir 不存在。
  • 移动与重命名:os.rename("old", "new") 和 shutil.move("old", "new") 均可用于文件重命名或跨盘迁移。
  • 彻底删除:os.rmdir("dir") 仅限空目录;非空目录清理需使用 shutil.rmtree("dir")。

五、真实操作顺序:批量重命名图片

以下脚本演示如何遍历指定目录,筛选常见图像格式并为文件名追加后缀 _fc。代码已优化路径拼接方式并全面适配 Python 3:

import os
import time

def rename_images(target_dir):
    # 验证路径有效性
    if not os.path.isdir(target_dir) and not os.path.isfile(target_dir):
        return False
    
    img_exts = {'bmp', 'jpeg', 'gif', 'psd', 'png', 'jpg'}
    processed_count = 0

    def process_item(current_path):
        nonlocal processed_count
        if os.path.isfile(current_path):
            parent_dir, filename = os.path.split(current_path)
            _, ext = os.path.splitext(filename)
            if ext.lower().lstrip('.') in img_exts:
                new_filename = f"{os.path.splitext(filename)[0]}_fc{ext}"
                # 使用 os.path.join 避免手动拼接导致的跨平台错误
                new_path = os.path.join(parent_dir, new_filename)
                os.rename(current_path, new_path)
                processed_count += 1
        elif os.path.isdir(current_path):
            for item in os.listdir(current_path):
                process_item(os.path.join(current_path, item))

    process_item(target_dir)
    return processed_count

# 配置目标路径并统一正斜杠
 dir_path = r'D:\xx\xx\images'.replace('\\', '/')
start_time = time.time()
total = rename_images(dir_path)
elapsed = time.time() - start_time
print(f'程序运行耗时:{elapsed:.2f}秒')
print(f'总共处理了 {total} 张图片')

简要总结

掌握 os 与 shutil 的核心接口即可应对绝大多数本地文件管理需求。实际应用中应优先采用 with 语句管理文件句柄,利用相对路径与 os.path.join 提升跨平台兼容性,并在执行破坏性命令前养成路径二次校验的习惯。以上就是 Python 文件读写与目录管理的详细内容,更多关于 Python 基础操作与自动化脚本的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。