网站首页 > 技术文章 正文
在 Python 开发的世界里,文件操作是一项基础且高频的任务。从日常的数据处理到复杂的项目部署,熟练掌握文件操作库能让我们的开发工作事半功倍。本文和大家聊聊我眼中开发必备的 5 个文件操作库,它们各有千秋,能满足不同场景下的文件操作需求。
一、os:系统级文件操作的瑞士军刀
库简介
作为 Python 内置的核心库,os库就像是我们与操作系统文件系统沟通的桥梁。它提供了丰富的函数,涵盖了文件和目录的基本操作、权限管理、环境变量访问等功能,几乎能满足所有系统级的文件操作需求。可以说,只要涉及到文件系统的交互,os库就是我们的首选工具之一。
核心功能与常用方法
功能分类 | 常用方法 | 说明 |
文件操作 | os.open() | 打开文件,返回文件描述符 |
os.read() | 从文件描述符中读取数据 | |
os.write() | 向文件描述符中写入数据 | |
os.close() | 关闭文件描述符 | |
目录操作 | os.mkdir() | 创建单个目录 |
os.makedirs() | 创建多层目录 | |
os.rmdir() | 删除单个空目录 | |
os.removedirs() | 删除多层空目录 | |
os.listdir() | 获取目录下的文件和子目录列表 | |
权限管理 | os.chmod() | 修改文件或目录的权限 |
os.stat() | 获取文件或目录的状态信息 |
实战示例
创建与删除目录
import os
# 创建单个目录
dir_path = "test_dir"
if not os.path.exists(dir_path):
os.mkdir(dir_path)
print(f"目录 {dir_path} 创建成功!")
else:
print(f"目录 {dir_path} 已存在!")
# 创建多层目录
multi_dir_path = "test_dir/sub_dir"
os.makedirs(multi_dir_path, exist_ok=True)
print(f"多层目录 {multi_dir_path} 创建成功!")
# 删除单个空目录
if os.path.exists(dir_path) and os.path.isdir(dir_path):
os.rmdir(dir_path)
print(f"目录 {dir_path} 删除成功!")
# 删除多层空目录
if os.path.exists(multi_dir_path) and os.path.isdir(multi_dir_path):
os.removedirs(multi_dir_path)
print(f"多层目录 {multi_dir_path} 删除成功!")
文件权限修改
import os
file_path = "test.txt"
# 打开文件并写入内容
with open(file_path, "w") as f:
f.write("Hello, World!")
# 将文件权限设置为只读(用户可读可写,组和其他用户只读)
os.chmod(file_path, 0o644)
print(f"文件 {file_path} 权限修改成功!")
# 获取文件状态信息
file_stat = os.stat(file_path)
print(f"文件大小:{file_stat.st_size} 字节")
print(f"最后修改时间:{file_stat.st_mtime}")
二、os.path:路径处理的贴心助手
库简介
os.path是os库的子模块,专门用于处理文件和目录的路径。它提供了一系列实用的函数,帮助我们轻松地解析、组合、判断路径的属性,比如判断路径是否存在、是否为文件或目录、获取文件扩展名等。在处理复杂的路径操作时,os.path能让我们的代码更加简洁和可靠。
核心功能与常用方法
功能分类 | 常用方法 | 说明 |
路径解析 | os.path.split() | 将路径分割为目录和文件名两部分 |
os.path.dirname() | 获取路径中的目录部分 | |
os.path.basename() | 获取路径中的文件名部分 | |
路径组合 | os.path.join() | 连接多个路径组件,自动处理分隔符 |
路径判断 | os.path.exists() | 判断路径是否存在 |
os.path.isfile() | 判断路径是否为文件 | |
os.path.isdir() | 判断路径是否为目录 | |
文件扩展名处理 | os.path.splitext() | 分离文件名和扩展名 |
os.path.extname() | 获取文件的扩展名 |
实战示例
路径解析与组合
import os.path
# 原始路径
path = "/user/home/documents/report.txt"
# 分割路径
dir_part, file_part = os.path.split(path)
print(f"目录部分:{dir_part},文件部分:{file_part}")
# 获取目录名和文件名
dir_name = os.path.dirname(path)
file_name = os.path.basename(path)
print(f"目录名:{dir_name},文件名:{file_name}")
# 组合路径
new_path = os.path.join(dir_name, "new_report.txt")
print(f"组合后的路径:{new_path}")
文件属性判断与扩展名处理
import os.path
file_path = "test.py"
dir_path = "test_dir"
# 判断路径是否存在
print(f"{file_path} 是否存在:{os.path.exists(file_path)}")
print(f"{dir_path} 是否存在:{os.path.exists(dir_path)}")
# 判断是否为文件或目录
print(f"{file_path} 是否为文件:{os.path.isfile(file_path)}")
print(f"{dir_path} 是否为目录:{os.path.isdir(dir_path)}")
# 分离文件名和扩展名
file_base, file_ext = os.path.splitext(file_path)
print(f"文件名(不含扩展名):{file_base},扩展名:{file_ext}")
三、shutil:高级文件操作的全能选手
库简介
shutil库是 Python 中用于高级文件操作的库,它在os库的基础上提供了更强大的功能,比如文件和目录的复制、移动、删除(支持非空目录)、压缩和解压缩等。当我们需要进行一些复杂的文件操作,如批量复制文件、打包项目等,shutil库就能大显身手,让操作变得简单高效。
核心功能与常用方法
功能分类 | 常用方法 | 说明 |
文件复制 | shutil.copy() | 复制文件,目标可以是文件或目录 |
shutil.copy2() | 复制文件,保留元数据(如修改时间、权限等) | |
目录复制 | shutil.copytree() | 复制整个目录及其内容 |
文件移动 | shutil.move() | 移动文件或目录,支持跨文件系统 |
文件删除 | shutil.rmtree() | 删除整个目录及其内容(非空目录也可删除) |
压缩与解压缩 | shutil.make_archive() | 创建压缩包(支持 zip、tar 等格式) |
shutil.unpack_archive() | 解压缩文件 |
实战示例
文件与目录的复制和移动
import shutil
# 复制单个文件
source_file = "test.txt"
dest_file = "copy_test.txt"
shutil.copy(source_file, dest_file)
print(f"文件 {source_file} 复制到 {dest_file} 成功!")
# 复制目录
source_dir = "test_dir"
dest_dir = "copy_test_dir"
shutil.copytree(source_dir, dest_dir)
print(f"目录 {source_dir} 复制到 {dest_dir} 成功!")
# 移动文件
new_dest_file = "new_copy_test.txt"
shutil.move(dest_file, new_dest_file)
print(f"文件 {dest_file} 移动到 {new_dest_file} 成功!")
# 移动目录
new_dest_dir = "new_copy_test_dir"
shutil.move(dest_dir, new_dest_dir)
print(f"目录 {dest_dir} 移动到 {new_dest_dir} 成功!")
压缩与解压缩文件
import shutil
# 创建压缩包(zip格式)
archive_name = "test_archive"
shutil.make_archive(archive_name, "zip", "test_dir")
print(f"压缩包 {archive_name}.zip 创建成功!")
# 解压缩zip文件
shutil.unpack_archive("test_archive.zip", "unpacked_dir")
print(f"压缩包解压缩到 unpacked_dir 成功!")
四、glob:文件搜索的便捷工具
库简介
glob库用于根据指定的模式查找文件路径,它支持通配符匹配,如*(匹配任意字符序列)、?(匹配单个字符)、[](匹配字符范围)等。使用glob库可以轻松地在目录中搜索符合条件的文件,而不需要手动遍历目录,大大提高了文件搜索的效率。
核心功能与常用方法
功能分类 | 常用方法 | 说明 |
简单模式匹配 | glob.glob() | 返回所有符合模式的文件路径列表 |
glob.iglob() | 返回一个生成器,逐个生成符合模式的文件路径 | |
递归模式匹配 | glob.glob(path, recursive=True) | 递归搜索子目录中的文件(Python 3.5+ 支持) |
实战示例
简单文件搜索
import glob
# 查找当前目录下所有的txt文件
txt_files = glob.glob("*.txt")
print("当前目录下的txt文件:")
for file in txt_files:
print(file)
# 查找当前目录下以"test"开头的文件
test_files = glob.glob("test*")
print("当前目录下以'test'开头的文件:")
for file in test_files:
print(file)
# 查找当前目录下第二个字符为'o'的文件
o_files = glob.glob("?o*")
print("当前目录下第二个字符为'o'的文件:")
for file in o_files:
print(file)
递归搜索子目录中的文件
import glob
# 递归查找所有目录下的py文件(Python 3.5+)
py_files = glob.glob("**/*.py", recursive=True)
print("所有目录下的py文件:")
for file in py_files:
print(file)
五、json:处理 JSON 文件的得力伙伴
库简介
在现代开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,用于存储和传输结构化数据。Python 内置的json库提供了强大的功能,用于将 Python 对象与 JSON 格式进行相互转换,支持读取和写入 JSON 文件,以及处理复杂的 JSON 数据结构。无论是与 Web 服务交互,还是存储配置文件,json库都是不可或缺的工具。
核心功能与常用方法
功能分类 | 常用方法 | 说明 |
序列化(Python 转 JSON) | json.dumps() | 将 Python 对象转换为 JSON 格式的字符串 |
json.dump() | 将 Python 对象写入 JSON 文件 | |
反序列化(JSON 转 Python) | json.loads() | 将 JSON 格式的字符串转换为 Python 对象 |
json.load() | 从 JSON 文件中读取数据并转换为 Python 对象 |
实战示例
写入 JSON 文件
import json
# 定义一个Python字典
data = {
"name": "张三",
"age": 25,
"hobbies": ["阅读", "编程", "旅游"],
"skills": {
"Python": "精通",
"Java": "熟练"
}
}
# 将数据写入JSON文件
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
print("数据写入JSON文件成功!")
读取 JSON 文件
import json
# 从JSON文件中读取数据
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print("从JSON文件中读取的数据:")
print(data)
print(f"姓名:{data['name']}")
print(f"年龄:{data['age']}")
print(f"爱好:{', '.join(data['hobbies'])}")
print(f"技能:{data['skills']}")
总结对比
为了让大家更清晰地了解这 5 个库的特点和适用场景,下面用表格进行总结对比:
库名 | 主要功能 | 适用场景 | 优势 | 示例操作 |
os | 系统级文件操作,包括文件和目录的创建、删除、权限管理等 | 基础文件系统交互,如创建目录、修改文件权限等 | 功能全面,与操作系统紧密结合 | os.mkdir()、os.chmod() |
os.path | 路径处理,如解析、组合、判断路径属性 | 处理文件路径相关操作,如获取文件扩展名、判断路径是否存在等 | 简化路径操作,提高代码可读性 | os.path.join()、os.path.exists() |
shutil | 高级文件操作,如复制、移动、删除(非空目录)、压缩和解压缩等 | 复杂文件操作,如批量复制文件、打包项目等 | 操作更便捷,支持更多高级功能 | shutil.copy()、shutil.make_archive() |
glob | 文件搜索,根据模式匹配文件路径 | 快速查找符合条件的文件,如查找所有 txt 文件 | 支持通配符,搜索方便高效 | glob.glob("*.txt") |
json | 处理 JSON 文件,实现 Python 对象与 JSON 的相互转换 | 存储和传输结构化数据,如配置文件、API 数据交互等 | 内置支持,使用简单 | json.dump()、json.load() |
这 5 个文件操作库在 Python 开发中各有其不可替代的作用。os和os.path是基础中的基础,掌握它们能让我们熟练处理文件系统的基本操作;shutil和glob则在复杂操作和文件搜索中发挥重要作用;json库更是在处理 JSON 数据时必不可少。希望大家通过学习和实践,能够熟练运用这些库,让自己的 Python 开发工作更加得心应手。在实际项目中,根据不同的需求灵活组合使用这些库,往往能达到事半功倍的效果。你在平时的开发中常用哪些文件操作库呢?有没有遇到过一些特殊的文件操作需求?欢迎在评论区留言分享你的经验和问题。
猜你喜欢
- 2025-05-23 如何在Python中保存文件?如何读取文件?示例代码
- 2025-05-23 python读取Excel表格
- 2025-05-23 OpenCV-Python教程:从视频文件、相机获取图像、写视频文件
- 2025-05-23 Dify Sandbox实现文件路径获取与Excel数据处理
- 2025-05-23 python中文件读写操作最佳实践——使用 os.path 进行路径操作
- 2025-05-23 开眼界!Python遍历文件可以这样做
- 2025-05-23 白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件
- 2025-05-23 使用python获取选择目录及子目录下所有文件
- 2025-05-23 失业程序员复习python笔记——excel读写处理
- 2025-05-23 python怎么读取excel文件
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)