百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Python 开发工程师必会的 5 个文件操作库

liuian 2025-06-12 14:11 29 浏览

在 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 开发工作更加得心应手。在实际项目中,根据不同的需求灵活组合使用这些库,往往能达到事半功倍的效果。你在平时的开发中常用哪些文件操作库呢?有没有遇到过一些特殊的文件操作需求?欢迎在评论区留言分享你的经验和问题。

相关推荐

总结下SpringData JPA 的常用语法

SpringDataJPA常用有两种写法,一个是用Jpa自带方法进行CRUD,适合简单查询场景、例如查询全部数据、根据某个字段查询,根据某字段排序等等。另一种是使用注解方式,@Query、@Modi...

解决JPA在多线程中事务无法生效的问题

在使用SpringBoot2.x和JPA的过程中,如果在多线程环境下发现查询方法(如@Query或findAll)以及事务(如@Transactional)无法生效,通常是由于S...

PostgreSQL系列(一):数据类型和基本类型转换

自从厂子里出来后,数据库的主力就从Oracle变成MySQL了。有一说一哈,贵确实是有贵的道理,不是开源能比的。后面的工作里面基本上就是主MySQL,辅MongoDB、ES等NoSQL。最近想写一点跟...

基于MCP实现text2sql

目的:基于MCP实现text2sql能力参考:https://blog.csdn.net/hacker_Lees/article/details/146426392服务端#选用开源的MySQLMCP...

ORACLE 错误代码及解决办法

ORA-00001:违反唯一约束条件(.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017:请求会话以设置跟踪事件ORA-00018:超出最大会话数ORA-00...

从 SQLite 到 DuckDB:查询快 5 倍,存储减少 80%

作者丨Trace译者丨明知山策划丨李冬梅Trace从一开始就使用SQLite将所有数据存储在用户设备上。这是一个非常不错的选择——SQLite高度可靠,并且多种编程语言都提供了广泛支持...

010:通过 MCP PostgreSQL 安全访问数据

项目简介提供对PostgreSQL数据库的只读访问功能。该服务器允许大型语言模型(LLMs)检查数据库的模式结构,并执行只读查询操作。核心功能提供对PostgreSQL数据库的只读访问允许L...

发现了一个好用且免费的SQL数据库工具(DBeaver)

缘起最近Ai不是大火么,想着自己也弄一些开源的框架来捣腾一下。手上用着Mac,但Mac都没有显卡的,对于学习Ai训练模型不方便,所以最近新购入了一台4090的拯救者,打算用来好好学习一下Ai(呸,以上...

微软发布.NET 10首个预览版:JIT编译器再进化、跨平台开发更流畅

IT之家2月26日消息,微软.NET团队昨日(2月25日)发布博文,宣布推出.NET10首个预览版更新,重点改进.NETRuntime、SDK、libraries、C#、AS...

数据库管理工具Navicat Premium最新版发布啦

管理多个数据库要么需要使用多个客户端应用程序,要么找到一个可以容纳你使用的所有数据库的应用程序。其中一个工具是NavicatPremium。它不仅支持大多数主要的数据库管理系统(DBMS),而且它...

50+AI新品齐发,微软Build放大招:拥抱Agent胜算几何?

北京时间5月20日凌晨,如果你打开微软Build2025开发者大会的直播,最先吸引你的可能不是一场原本属于AI和开发者的技术盛会,而是开场不久后的尴尬一幕:一边是几位微软员工在台下大...

揭秘:一条SQL语句的执行过程是怎么样的?

数据库系统能够接受SQL语句,并返回数据查询的结果,或者对数据库中的数据进行修改,可以说几乎每个程序员都使用过它。而MySQL又是目前使用最广泛的数据库。所以,解析一下MySQL编译并执行...

各家sql工具,都闹过哪些乐子?

相信这些sql工具,大家都不陌生吧,它们在业内绝对算得上第一梯队的产品了,但是你知道,他们都闹过什么乐子吗?首先登场的是Navicat,这款强大的数据库管理工具,曾经让一位程序员朋友“火”了一把。Na...

详解PG数据库管理工具--pgadmin工具、安装部署及相关功能

概述今天主要介绍一下PG数据库管理工具--pgadmin,一起来看看吧~一、介绍pgAdmin4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件,它允许连接到特定的数据库,创建表和...

Enpass for Mac(跨平台密码管理软件)

还在寻找密码管理软件吗?密码管理软件有很多,但是综合素质相当优秀且完全免费的密码管理软件却并不常见,EnpassMac版是一款免费跨平台密码管理软件,可以通过这款软件高效安全的保护密码文件,而且可以...