Python常用内置模块介绍——文件与系统操作详解
wptr33 2025-06-15 19:46 24 浏览
Python提供了多个强大的内置模块用于文件和系统操作,下面我将详细介绍最常用的几个模块及其核心功能。
1.os模块 - 操作系统交互
os模块提供了与操作系统交互的接口,包括文件/目录操作、进程管理、环境变量等。
常用功能
文件和目录操作
import os
# 获取当前工作目录
current_dir = os.getcwd()
# 改变当前工作目录
os.chdir('/path/to/directory')
# 列出目录内容
files = os.listdir('.') # 返回当前目录下的文件和子目录列表
# 创建目录
os.mkdir('new_dir') # 创建单个目录
os.makedirs('path/to/new_dir') # 递归创建多级目录
# 删除目录或文件
os.remove('file.txt') # 删除文件
os.rmdir('empty_dir') # 删除空目录
os.removedirs('path/to/empty_dir') # 递归删除空目录
# 重命名文件或目录
os.rename('old.txt', 'new.txt')
# 获取文件/目录信息
file_stat = os.stat('file.txt') # 返回包含文件大小、修改时间等信息的对象
file_size = file_stat.st_size # 文件大小(字节)
mod_time = file_stat.st_mtime # 最后修改时间(时间戳)
路径操作
# 路径拼接(跨平台兼容)
full_path = os.path.join('dir', 'subdir', 'file.txt')
# 路径拆分
dirname, filename = os.path.split('/path/to/file.txt')
basename = os.path.basename('/path/to/file.txt') # 'file.txt'
dirname = os.path.dirname('/path/to/file.txt') # '/path/to'
# 获取绝对路径
abs_path = os.path.abspath('relative/path')
# 检查路径是否存在
exists = os.path.exists('/path/to/file')
# 检查是否是文件或目录
is_file = os.path.isfile('/path/to/file')
is_dir = os.path.isdir('/path/to/dir')
# 获取文件扩展名
ext = os.path.splitext('file.txt')[1] # '.txt'
系统信息
# 获取环境变量
home_dir = os.environ['HOME']
# 执行系统命令(不推荐,建议用subprocess)
os.system('ls -l')
# 获取当前进程ID
pid = os.getpid()
2.sys模块 - 系统相关功能
sys模块提供与Python解释器和系统环境交互的功能。
常用功能
import sys
# 命令行参数
args = sys.argv # 第一个参数是脚本名,后面是传入的参数
# 标准输入/输出/错误
sys.stdout.write('Hello\n') # 等同于print()
sys.stderr.write('Error message\n')
# 退出程序
sys.exit(0) # 0表示成功,非0表示错误
# Python模块搜索路径
print(sys.path) # 可以修改此列表来添加模块搜索路径
# Python版本信息
print(sys.version)
print(sys.platform) # 操作系统平台,如'linux', 'win32', 'darwin'(Mac)
3.pathlib模块(Python 3.4+) - 面向对象的路径操作
pathlib提供了更直观、面向对象的路径操作方式。
基本用法
from pathlib import Path
# 创建Path对象
p = Path('/path/to/file.txt')
# 获取路径各部分
print(p.parent) # 父目录
print(p.name) # 文件名(含扩展名)
print(p.stem) # 文件名(不含扩展名)
print(p.suffix) # 扩展名
# 路径拼接
new_path = p.parent / 'new_file.txt'
# 文件操作
p.exists() # 检查是否存在
p.is_file() # 是否是文件
p.is_dir() # 是否是目录
# 读写文件
content = p.read_text() # 读取文本
p.write_text('Hello') # 写入文本
# 目录操作
dir_p = Path('mydir')
dir_p.mkdir(exist_ok=True) # 创建目录,exist_ok=True避免目录已存在时报错
# 遍历目录
for file in dir_p.iterdir(): # 遍历目录内容
print(file)
# 递归查找文件
for py_file in dir_p.rglob('*.py'): # 递归查找所有.py文件
print(py_file)
4.shutil模块 - 高级文件操作
shutil模块提供了对文件和目录的高级操作,如复制、移动、归档等。
常用功能
import shutil
# 复制文件
shutil.copy('src.txt', 'dst.txt') # 复制文件内容
shutil.copy2('src.txt', 'dst.txt') # 复制文件内容和元数据(如修改时间)
# 复制目录
shutil.copytree('src_dir', 'dst_dir') # 递归复制整个目录树
# 移动文件/目录
shutil.move('src.txt', 'dst.txt') # 可以用于重命名
# 删除目录树
shutil.rmtree('dir_to_remove') # 删除目录及其所有内容
# 归档操作
shutil.make_archive('backup', 'zip', 'dir_to_archive') # 创建zip归档
shutil.unpack_archive('backup.zip', 'extract_to') # 解压归档
# 磁盘空间信息(Unix-like系统)
total, used, free = shutil.disk_usage('/') # 返回字节数
5.glob模块 - 文件模式匹配
glob模块用于查找符合特定模式的文件路径。
import glob
# 查找当前目录下所有.py文件
py_files = glob.glob('*.py')
# 递归查找所有子目录中的.py文件
all_py_files = glob.glob('**/*.py', recursive=True)
# 使用iglob获取迭代器(节省内存)
for py_file in glob.iglob('*.py'):
print(py_file)
6.tempfile模块 - 临时文件和目录
import tempfile
# 创建临时文件
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp.write(b'Hello') # 写入内容
tmp_path = tmp.name # 获取临时文件路径
# 创建临时目录
with tempfile.TemporaryDirectory() as tmpdir:
print(f'临时目录: {tmpdir}')
# 目录会在with块结束后自动删除
最佳实践建议
- 路径处理:
- 新项目优先使用pathlib,它更现代、更安全
- 需要兼容旧版Python时使用os.path
- 文件操作:
- 使用with语句确保文件正确关闭
- 大文件操作时考虑使用迭代方式避免内存问题
- 跨平台兼容:
- 使用os.path.join()或pathlib的路径拼接
- 避免硬编码路径分隔符(/或\)
- 错误处理:
- 文件操作时总是处理可能的异常(如FileNotFoundError, PermissionError)
这些模块的组合使用可以满足绝大多数文件和系统操作需求,从简单的文件读写到复杂的目录遍历和系统管理任务。
整理不易,欢迎点赞收藏
相关推荐
- MySQL进阶五之自动读写分离mysql-proxy
-
自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...
- 3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?
-
引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...
- 一文由浅入深带你完全掌握MySQL的锁机制原理与应用
-
本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...
- 验证Mysql中联合索引的最左匹配原则
-
后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...
- MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)
-
目录1.索引基础...
- 你会看 MySQL 的执行计划(EXPLAIN)吗?
-
SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...
- MySQL 从入门到精通(四)之索引结构
-
索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...
- mysql总结——面试中最常问到的知识点
-
mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...
- mysql总结——面试中最常问到的知识点(2)
-
首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...
- MySQL基础全知全解!超详细无废话!轻松上手~
-
本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...
- 深入剖析 MySQL 中的锁机制原理_mysql 锁详解
-
在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...
- Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析
-
引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...
- MySQL基础篇:DQL数据查询操作_mysql 查
-
一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...
- MySql:索引的基本使用_mysql索引的使用和原理
-
一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
redission YYDS spring boot redission 使用
-
SparkSQL——DataFrame的创建与使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)