Python os与sys模块文件操作与系统调用全指南(附实战代码)
本文为 Python 文件操作与系统调用入门实战笔记,一次性讲清os与sys模块核心用法,含文件 / 目录管理、路径处理、压缩包操作、系统命令调用等场景,代码可直接运行,适合新手学习与复用!
一、前言
os和sys是 Python 中最基础、最常用的两个内置模块,几乎所有脚本、自动化工具都离不开它们:
os模块:专注操作系统级文件 / 目录管理、路径处理、系统命令调用,是文件操作的 “瑞士军刀”sys模块:专注Python 解释器交互、命令行参数、输入输出流管理,是脚本与系统交互的桥梁
本文将结合实战代码,从基础到进阶,带你一次性掌握这两个模块的核心用法。
二、环境准备
无需额外安装依赖,Python 内置模块,直接导入即可:
import os
import sys
import zipfile # 用于压缩包操作
三、os模块核心功能实战
1. 工作目录操作
1.1 获取与切换当前工作目录
# 获取当前工作目录
print("当前工作目录:", os.getcwd())
# 切换工作目录(需注意路径格式,Windows用\或/,推荐用r字符串)
os.chdir(r".\数据1")
print("切换后工作目录:", os.getcwd())
# 切回原目录(推荐先保存初始目录,避免路径混乱)
original_dir = os.getcwd()
os.chdir(original_dir)
1.os.getcwd()可以返回当前的工作路径
2.os.chdir()可以改变当前的工作路径,需注意路径格式,Windows用\或/,推荐用r字符串
1.2 创建目录
# 创建单级目录(已存在会报错)
os.mkdir('数据1')
# 创建多级目录(自动创建不存在的父目录)
os.makedirs(r'数据104\内容b\内容a\内容c', exist_ok=True)
1.os.mkdir()可以创建单级目录
2.os.makedirs()可以创建多级目录,自动创建不存在的父目录
2. 批量创建目录
# 批量创建200个文件夹(数据1下的文件夹1~文件夹200)
for i in range(1, 201):
file_name='文件夹'+str(i)
# 拼接完整路径,跨平台兼容
file_path = os.path.join(os.getcwd(), '数据1', file_name)
os.mkdir(file_path)
这里是用一个for循环,先用file_name保存要创建的文件夹i(i=1~200)的名字,再用file_path保存要创建的文件夹的路径,这里使用了os.path.join(),可以自动拼接函数里面的参数形成一个路径,然后用os.mkdir(file_path)创建一个文件夹i,最终就在数据1这个文件夹里面创建了文件夹1~文件夹200这两百个文件夹
3. 路径处理工具
3.1 路径拼接与判断
# 跨平台路径拼接(比手动写/更安全)
dir_new = os.path.join(os.getcwd(), '数据2', '内容c')
print("拼接后的路径:", dir_new)
# 判断路径是否为绝对路径
a = os.path.isabs('数据2\文件夹201') # 相对路径,返回False
b = os.path.isabs(r'E:\test\数据1') # 绝对路径,返回True
print("是否为绝对路径:", a, b)
3.2 路径拆分与获取文件名 / 目录名
path = r'E:\test\data.txt'
file_name = os.path.basename(path) # 获取文件名(含后缀)
dir_name = os.path.dirname(path) # 获取文件所在目录
file_dir_name = os.path.split(path) # 拆分路径为(目录,文件名)元组
print(file_name,'\n',dir_name,'\n',file_dir_name)
下面是我的运行结果:

3.3 获取文件大小
path = r'E:\test\search_engine\分词后汇总.txt'
# 获取文件大小(单位:字节,除以1024可得KB)
print("文件大小(字节):", os.path.getsize(path))
print("文件大小(KB):", os.path.getsize(path) / 1024)
4. 文件 / 目录删除与重命名
4.1 删除文件与空目录
# 删除单个文件(文件不存在会报错)
os.remove(r'E:\test\新建 文本文档.txt')
# 删除空目录(目录非空会报错)
os.rmdir(r'E:\test\数据1\文件夹1')
4.2 批量重命名文件 / 目录
# 批量重命名:将文件夹2重命名为文件200、文件201
for i in range(0, 1):
old = r'E:\test\数据1\文件夹2'
new = os.path.join(r'E:\test\数据1', f'文件{i+200}')
os.rename(old, new)
5. 硬链接创建(Windows 需管理员权限)
# 为文件创建硬链接(同一文件的多个入口,不占额外空间)
os.link(r'E:\test\data.txt', r'E:\test\11.txt')
6. 目录遍历与统计
6.1 列出目录下所有文件 / 文件夹
print("当前目录下的内容:", os.listdir('.'))
6.2 统计目录下所有文件总大小
print('相对路径中有:',os.listdir('.'))
file_total_size=0
for file_name in os.listdir('.'):
file_dir=os.path.join(os.getcwd(),file_name)
file_total_size+=os.path.getsize(file_dir)
print(file_total_size)
上述代码用file_total_size来统计文件夹里的文件总大小,用for循环遍历当前文件夹下的每个文件,然后用file_dir保存遍历的文件的绝对路径,然后用os.path.getsize()函数来获得该文件的大小,然后用算出总和就是当前目录下所有文件的总大小
我的运行结果如下:

7. 文件 / 目录存在性与类型判断
path = r'E:\test\data.txt'
print("路径是否存在:", os.path.exists(path))
print("是否为文件:", os.path.isfile(path))
print("是否为目录:", os.path.isdir(path))
根据是否存在返回相应的True和False
8. 系统命令调用
8.1 os.system 执行系统命令(仅返回退出码)
# 切换到游戏目录,启动exe(需先切到工作目录,避免依赖找不到)
os.chdir(r'E:\95版植物大战僵尸')
# 启动exe,返回值为退出码(0=成功,非0=失败)
a = os.system(r'E:\95版植物大战僵尸\PlantsVsZombies.exe')
print("命令执行退出码:", a)
# 打开文本文件
os.system(r'E:\test\data.txt')
这里用os.system打开文件,这里打开的是植物大战僵尸游戏,但是如果直接用绝对路径打开,不先切换工作路径,游戏会运行不了,原因是:
- 软件 / 游戏运行时,默认以当前工作目录为根路径,去加载图片、音效、配置、依赖文件。
- 直接写绝对路径启动
exe,Python 的工作目录还是脚本所在文件夹,不是游戏文件夹。 - 游戏在脚本目录里找不到配套资源文件,因此启动失败、闪退。
四、zipfile压缩包操作实战
1. 压缩包基础判断与读取
import zipfile
# 判断文件是否为合法zip压缩包
print("是否为zip文件:", zipfile.is_zipfile('书代码.zip'))
# 读取压缩包内所有文件列表
with zipfile.ZipFile('书代码.zip', 'r') as z:
print("压缩包内文件列表:", z.namelist())
2. 批量解压压缩包
with zipfile.ZipFile('书代码.zip', 'r') as z:
for f in z.namelist():
# 解压所有文件到指定目录
z.extract(f, r'数据1\文件200')
print("解压完成!")
3. 手动创建压缩包
# 创建新压缩包,写入指定文件
with zipfile.ZipFile('书代码新.zip', 'w') as z:
# 写入文件(默认保留目录结构)
z.write(r'数据1\文件200\num1.py')
z.write(r'数据1\文件200\num2.py')
print("压缩包创建完成!")
4. 批量压缩目录下所有文件
with zipfile.ZipFile(r'数据1\文件夹3\压缩全.zip', 'w') as z:
for file_name in os.listdir('数据1\文件夹3'):
# 排除压缩包自身,避免循环压缩
if file_name != '压缩全.zip':
file_path = os.path.join('数据1/文件夹3/', file_name)
# arcname指定压缩包内文件名,不保留原目录结构
z.write(file_path, arcname=file_name)
print("批量压缩完成!")
五、sys模块核心功能实战
1. Python 版本信息获取与判断
# 获取Python版本号与详细信息
print("Python版本:", sys.version)
print("版本元组:", sys.version_info)
# 强制版本校验(低于3.8则退出)
if (sys.version_info[0] * 10 + sys.version_info[1]) / 10 < 3.8:
print('您的Python版本过低,请安装Python3.8及以上版本')
sys.exit()
else:
print("您的Python版本正确,代码将继续运行")
print('hello,world')
2. 标准输入 / 输出 / 错误流
# 标准输出流(与print类似,直接写入控制台)
sys.stdout.write('hello')
# 标准输入流(读取用户输入,等价于input())
a = sys.stdin.readline()
print("用户输入的内容:", a)
# 标准错误流(用于输出错误信息,区别于普通输出)
sys.stderr.write('错误,请修改!')
# 程序异常退出(可携带错误信息)
sys.exit('错误,请修改!')
六、避坑指南与常见错误
- 路径格式错误:Windows 路径用
\需转义,推荐用r''原始字符串或/ - 工作目录混乱:切换目录前务必用
os.getcwd()保存初始目录,避免后续操作出错 - 文件 / 目录不存在:删除、重命名前建议用
os.path.exists()判断,避免报错 - 压缩包解压 / 创建权限:解压到系统目录(如 C 盘根目录)可能需要管理员权限
os.system与os.popen区别:os.system仅返回退出码,无法捕获输出;os.popen可捕获输出,需手动关闭管道
七、作业
编写一个 Python 程序,使用 os 库完成以下操作:
第一步:在当前目录下创建一个名为 test_folder 的文件夹;
第二步:打印出当前程序的工作目录路径;
第三步:切换工作目录到刚创建的 test_folder 文件夹;
第四步:在 test_folder 文件夹内创建一个名为 test_file.txt 的空文件(提示:可结合 open 函数);
第五步:打印出 test_folder 文件夹内的所有文件 / 文件夹名称;
第六步:删除刚创建的 test_file.txt 文件;
第七步:切换回最初的工作目录,删除 test_folder 文件夹。
要求:代码中要包含必要的异常处理(比如文件夹已存在、文件不存在时的报错处理)。
import os
try:
os.mkdir('test_folder')
except FileExistsError:
print("文件夹已存在")
original_dir=os.getcwd()
print(os.getcwd())
os.chdir('test_folder')
print(os.getcwd())
open('test_file.txt','w')
print(os.listdir('.'))
try:
os.remove('test_file.txt')
except FileNotFoundError:
print("文件不存在,无法删除")
os.chdir(original_dir)
print(os.getcwd())
os.rmdir('test_folder')
八、总结
本文覆盖了os、sys、zipfile三大模块的核心实战用法,从文件 / 目录管理、路径处理,到压缩包操作、系统命令调用,再到 Python 解释器交互,都是日常脚本开发、自动化工具中高频使用的场景。
掌握这些用法后,你可以轻松实现:
- 批量文件整理、目录备份
- 自动化数据压缩与解压
- 系统命令批量执行
- 脚本参数化运行与版本校验
这些代码可直接复用在文件处理、爬虫数据整理、自动化运维等场景中,是 Python 入门的必备技能!
更多推荐

所有评论(0)