摘要本文系统介绍了 Python 中文件与目录操作的核心知识。首先阐述了 IO 流的基本概念然后详细讲解了文件流的读写操作包括读、写、模式以及 with 语句的用法。最后全面列举了文件与文件夹操作的常用方法涵盖 os、os.path、shutil、pathlib 等模块并提供了遍历目录和文件的实用技巧。文章旨在帮助读者掌握 Python 文件处理的核心技能提升开发效率。目录1. Python IO 流基础2. 文件流操作详解2.1 读文件操作2.2 写文件操作2.3 模式的使用3. With 语句的用法4. 文件与文件夹操作常用方法4.1 os 模块常用方法4.2 os.path 模块常用方法4.3 shutil 模块常用方法4.4 pathlib 模块Python 3.4 推荐4.5 遍历目录和文件总结1. Python IO 流基础在 Python 中IOInput/Output输入/输出流是数据在程序和外部世界如文件、网络、控制台之间流动的抽象概念。Python 通过内置的io模块提供了丰富的流处理工具但最常用的是文件流。通过“流”的形式允许计算机程序使用相同的方式来访问不同的输入/输出源。stream是从起源source到接收的sink的有序数据。我们这里把输入/输出源对比成“水桶”那么流就是“管道”。文件流的核心是open()函数它返回一个文件对象也称为文件句柄通过这个对象我们可以对文件进行读写操作。2. 文件流操作详解2.1 读文件操作打开文件流语法f open(file, moder, [encodingNone, ...])open函数最常用的三个参数如下file要操作的文件路径mode文件的打开模式r 读取默认值w 写入并先截断文件x 排它性创建如果文件已存在则创建失败a 打开文件用于写入如果文件存在则在文件末尾追加内容b 二进制模式t 文本模式默认值 打开用于更新读取与写入encoding字符编码读操作文件对象.read() : 默认读取整个文件。 或者可以读取指定大小的数据若不传递size参数表示读取文件中所有的内容注意内存占用。若传递了size参数表示读取文件中指定个数的字符或指定大小的字节。文件对象.readlines()文件对象.readline()Python 提供了多种读取文件内容的方法# 1. 读取整个文件内容 with open(example.txt, r, encodingutf-8) as f: content f.read() # 读取全部内容 print(content) 2. 逐行读取 with open(example.txt, r, encodingutf-8) as f: for line in f: # 文件对象是可迭代的 print(line.strip()) # strip() 去除行尾换行符 3. 读取指定字节数 with open(example.txt, r, encodingutf-8) as f: chunk f.read(100) # 读取前100个字符 print(chunk) 4. 读取所有行到列表 with open(example.txt, r, encodingutf-8) as f: lines f.readlines() # 返回包含所有行的列表 for line in lines: print(line.strip())下面会单独介绍with语句如果不用with语句需要手动关闭资源。f open(fileD:\\text.txt, modert, encodingutf-8) f.close()2.2 写文件操作打开文件流语法f open(file, modewt, [encodingNone, ...])注意如果文件不存在会创建该文件mode文件的打开模式w 写入先清空源文件内容再写入x 排它性创建如果文件已存在则创建失败a 打开文件用于写入如果文件存在则在文件末尾追加内容写操作文件对象.write()文件对象.flush()Python 写入文件时并不是每写一次就立刻落盘而是先写到“缓冲区”里。flush方法把缓冲区中的数据立刻写入到文件中。或者close方法执行的时候也会把缓冲区内容写入文件的写入文件时需要注意打开模式# 1. 覆盖写入w 模式 with open(output.txt, w, encodingutf-8) as f: f.write(Hello, World!\n) # 写入字符串 f.writelines([Line 1\n, Line 2\n]) # 写入多行 2. 追加写入a 模式 with open(log.txt, a, encodingutf-8) as f: f.write(f{datetime.now()}: User logged in\n) 注意w 模式会清空文件原有内容a 模式则在文件末尾追加2.3 模式的使用open函数最常用的三个参数如下file要操作的文件路径mode文件的打开模式r 读取默认值w 写入并先截断文件x 排它性创建如果文件已存在则创建失败a 打开文件用于写入如果文件存在则在文件末尾追加内容b 二进制模式t 文本模式默认值 打开用于更新读取与写入encoding字符编码其中 的作用就是给“单一功能”的模式增加“另一半”的能力。不带 的模式单一职责r只读只能读不能写。写就报错。w只写只能写不能读。读就报错。a只追加只能写且只能写在末尾不能读。带上 的模式读写二合一r读 写但文件必须存在且不会清空原内容。w写 读文件不存在就创建存在就清空原内容。a追加 读文件不存在就创建不清空指针在末尾。 模式表示同时支持读写操作# r 模式读写模式文件必须存在 with open(data.txt, r, encodingutf-8) as f: content f.read() # 先读取 f.seek(0) # 移动文件指针到开头 f.write(Updated: content) # 写入修改 w 模式读写模式会创建新文件或清空已有文件 with open(temp.txt, w, encodingutf-8) as f: f.write(Initial content\n) f.seek(0) # 回到开头读取 print(f.read()) a 模式追加读写模式 with open(log.txt, a, encodingutf-8) as f: f.write(New log entry\n) f.seek(0) # 可以读取但写入总是在末尾 print(f.read())3. With 语句的用法with语句是 Python 的上下文管理器用于自动管理资源如文件关闭、数据库连接断开、锁释放等的打开和关闭# 传统方式需要手动关闭文件 f open(file.txt, r) try: content f.read() finally: f.close() # 必须手动关闭 使用 with 语句推荐 with open(file.txt, r) as f: content f.read() 离开 with 块后文件会自动关闭即使发生异常也会关闭 同时打开多个文件 with open(input.txt, r) as fin, open(output.txt, w) as fout: content fin.read() fout.write(content.upper())优点自动管理资源确保文件正确关闭代码更简洁可读性更好异常安全即使出现异常也能保证资源释放with语句后跟的上下文是一个对象对象中需要有enter方法和exit方法。4. 文件与文件夹操作常用方法4.1 os 模块常用方法import os # 系统信息 os.name # 【系统信息】查看当前操作系统名字nt表示Windowsposix表示Linux os.sep # 【系统信息】获取当前系统平台路径分隔符 # 目录操作 os.getcwd() # 【目录操作】获取当前工作目录 os.listdir(path) # 【目录操作】列出指定目录path的所有文件和目录名 os.chdir(path) # 【目录操作】切换当前工作目录 os.mkdir(path) # 【目录操作】创建单层目录父目录必须存在 os.makedirs(path) # 【目录操作】创建多层目录自动创建不存在的父目录 os.rmdir(path) # 【目录操作】删除单层空目录目录必须为空 os.removedirs(path) # 【目录操作】递归删除多层空目录从最内层开始递归删除多层空目录从最内层往外层删中途任意目录非空则终止报错仅能删空目录 os.path.isdir(path) # 【目录操作】判断指定路径目标是否为目录 os.path.dirname(path) # 【目录操作】提取路径中的目录部分 文件操作 os.remove(file_name) # 【文件操作】删除指定文件不能删除目录 os.rename(old_name, new_name) # 【文件/目录操作】重命名文件或目录 os.path.isfile(path) # 【文件操作】判断指定路径目标是否为文件 os.path.splitext(path) # 【文件操作】分离文件扩展名返回 (文件名, 扩展名) os.path.basename(path) # 【文件操作】提取文件名含扩展名 os.path.getsize(path) # 【文件操作】返回文件大小字节 路径操作通用 os.path.abspath(path) # 【路径操作】获取指定相对路径的绝对路径文件或目录均可 os.path.split(path) # 【路径操作】分割路径为 (目录, 文件名) 元组 os.path.exists(path) # 【路径操作】判断指定路径是否存在文件或目录均可 os.path.join(path, *paths) # 【路径操作】连接多个路径片段自动添加正确分隔符 环境变量 os.environ[key] # 【环境变量】获取当前环境变量值不存在报错 KeyError字典取值key不存在直接抛KeyError可写os.environ.get(key)等价os.getenv os.getenv(key) # 【环境变量】获取当前环境变量值不存在返回 Noneimport os 文件和目录操作 os.rename(old.txt, new.txt) # 重命名文件 os.remove(file.txt) # 删除文件 os.mkdir(new_dir) # 创建目录 os.makedirs(path/to/deep/dir, exist_okTrue) # 创建多级目录 os.rmdir(empty_dir) # 删除空目录 os.removedirs(a/b/c) # 递归删除空目录 路径操作 current_dir os.getcwd() # 获取当前工作目录 os.chdir(/path/to/dir) # 改变当前目录 abs_path os.path.abspath(file.txt) # 获取绝对路径 base_name os.path.basename(/path/to/file.txt) # 获取文件名 dir_name os.path.dirname(/path/to/file.txt) # 获取目录名 判断文件类型 os.path.exists(file.txt) # 路径是否存在 os.path.isfile(file.txt) # 是否是文件 os.path.isdir(dir) # 是否是目录 os.path.getsize(file.txt) # 获取文件大小字节4.2 os.path 模块常用方法import os.path 路径拼接和分割 full_path os.path.join(dir, subdir, file.txt) # 智能拼接路径 path_parts os.path.split(/path/to/file.txt) # 分割为目录和文件名 name_ext os.path.splitext(document.pdf) # 分割文件名和扩展名 路径信息获取 file_size os.path.getsize(data.txt) # 文件大小 mod_time os.path.getmtime(file.txt) # 最后修改时间 access_time os.path.getatime(file.txt) # 最后访问时间 create_time os.path.getctime(file.txt) # 创建时间Unix 系统4.3 shutil 模块常用方法import shutil 文件操作 shutil.copy(source.txt, dest.txt) # 复制文件 shutil.copy2(source.txt, dest.txt) # 复制文件并保留元数据 shutil.move(old.txt, new.txt) # 移动/重命名文件 目录操作 shutil.copytree(src_dir, dst_dir) # 递归复制目录 shutil.rmtree(dir_to_delete) # 递归删除目录包括非空目录 磁盘使用 total, used, free shutil.disk_usage(/) # 获取磁盘使用情况4.4 pathlib 模块Python 3.4 推荐from pathlib import Path 创建 Path 对象 p Path(example.txt) 文件操作 p.write_text(Hello, World!) # 写入文本 content p.read_text() # 读取文本 p.rename(new_name.txt) # 重命名 p.unlink() # 删除文件 目录操作 dir_path Path(my_dir) dir_path.mkdir(exist_okTrue) # 创建目录 for file in dir_path.iterdir(): # 遍历目录 print(file.name) 路径操作 parent p.parent # 父目录 name p.name # 文件名 stem p.stem # 文件名不含扩展名 suffix p.suffix # 扩展名 absolute p.absolute() # 绝对路径4.5 遍历目录和文件import os 遍历当前目录所有文件和子目录 for root, dirs, files in os.walk(.): print(f当前目录: {root}) print(f子目录: {dirs}) print(f文件: {files}) print(---) 列出目录内容 files os.listdir(.) # 返回名称列表 entries os.scandir(.) # 返回 DirEntry 对象性能更好 for entry in entries: if entry.is_file(): print(f文件: {entry.name}, 大小: {entry.stat().st_size}字节) elif entry.is_dir(): print(f目录: {entry.name})总结Python 提供了丰富的文件与目录操作工具文件读写使用open()函数配合不同模式r, w, a, 资源管理推荐使用with语句自动管理文件关闭路径操作os.path用于传统路径处理pathlib提供更现代的面向对象接口文件操作os模块提供基础操作shutil提供高级文件操作目录遍历os.walk()和os.scandir()用于递归遍历目录在实际开发中建议优先使用pathlibPython 3.4和with语句它们能让代码更简洁、安全。