目录
简介
在 Python 的世界里,与操作系统交互是一项基础且重要的技能,而os 库正是实现这一交互的核心工具。作为 Python 标准库中用于访问操作系统功能的模块,os 库无需额外安装,却能帮我们轻松搞定文件操作、路径处理、环境变量管理等一系列与系统相关的任务。无论是创建删除文件夹、遍历目录下的文件,还是获取系统信息、执行系统命令,os 库都提供了简洁易用的接口。对于初学者来说,掌握 os 库能让代码更灵活地适配不同操作系统;对于开发者而言,它更是自动化脚本、批量处理任务中的得力助手。
1.操作文件路径
Python 标准库提供了 os 库来管理操作系统相关功能,无须下载、安装,os 库包含丰富的操作文件的功能,可以通过import os
导入库之后使用dir(os)
查询获取。
import os
print(dir(os))
1. 获取当前路径
os 库中的getcwd()
函数可用于获取当前代码所在文件夹的绝对路径(不包含代码文件名)
import os
print(os.getcwd())#获取当前代码所在的绝对路径
2.创建文件夹
os 库中有两种用于创建文件夹的函数,分别为mkdir()
函数和makedirs()
函数。
(1.)mkdir()
函数
在 os 库中使用mkdir(路径)
函数可以实现在路径中创建一个新的文件夹。
import os
os.mkdir(r'E:\书代码\第9章\数据1')#在路径中创建一个新的文件夹
第 2 行代码在 “E:\ 书代码 \ 第 9 章” 这个路径中创建了一个名为 “数据 1” 的新文件夹。必须保证 “E:\ 书代码 \ 第 9 章” 这个路径是正确的,否则会无法创建新文件夹
(2.)makedirs () 函数
在 os 库中makedirs(路径)
函数是根据参数来递归创建文件夹,递归指根据路径创建包含的全部文件夹。
import os
os.makedirs(r'E:\书代码\数据102\内容b')#递归来创建文件夹
第 2 行代码使用makedirs()
函数创建了文件夹,由于笔者 E 盘下并没有文件夹 “书代码 1”,因此代码执行后会在 E 盘中连续创建 3 个文件夹,其中 “书代码 1” 文件夹包含 “数据 1” 文件夹,“数据 1” 文件夹包含 “内容 b” 文件夹。
因此mkdir()
函数和makedirs()
函数的区别在于是否可以递归创建文件夹。
01 import os
02 for i in range(1,21):
file_name = '文件夹'+str(i)
file_path = os.getcwd()+'\\数据\\'+ file_name
os.mkdir(file_path)
3.拼接路径
使用os.path.join()
方法可以实现将参数拼接为目录路径,从而方便且快速地获取文件地址。
import os
dir_new= os.path.join(os.getcwd(),'数据2','内容c')
print(dir_new,type(dir_new))
第 2 行代码中的os.getcwd()
函数用于获取当前代码所在文件夹的路径,os.path.join()
方法将当前路径、“数据 2” 和 “内容 c” 以路径的形式进行拼接(无须考虑构成路径的转义字符等问题)。
4.跳转路径
如果需要在程序中实现从当前代码所在文件夹路径跳转到其他路径,可以使用 os 库中的chdir(路径)
函数,但要注意路径必须是已经存在的,否则运行代码后会出现报错。
import os
print(os.getcwd())
os.chdir('E:\书代码\第9章\数据1')#改变当前地址的路径
print(os.getcwd())
第 2 行代码输出当前工作路径。
第 3 行代码使用os.chdir()
将当前工作路径修改为 “E:\ 书代码 \ 第 9 章 \ 数据 1”,即改变了当前工作路径。修改当前工作路径是为了便于后期可以使用相对路径操作新路径下的文件。
5.判断相对路径和绝对路径
使用os.path.isabs(path)
方法可以判断当前路径是相对路径还是绝对路径。
import os
a=os.path.isabs('数据2\内容c')#判断当前路径是相对路径还是绝对路径
b=os.path.isabs('E:\书代码')
print(a,b)
第 2 行和第 3 行代码分别判断路径是绝对路径还是相对路径,如果是绝对路径将返回True
,如果是相对路径将返回False
。
6. 获取文件路径和文件名
os 库的 path 模块下的basename(path)
方法可用于获取路径中的文件名,dirname(路径)
方法可用于获取路径中的文件夹路径,split(路径)
方法可用于将获取的文件夹路径和文件名以元组的形式返回。
import os
path = r'E:\书代码\数据2\内容c\Python程序代码1.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)
# 运行结果为:
#Python程序代码1.txt
#E:\书代码\数据2\内容c
#('E:\\书代码\\数据2\\内容c', 'Python程序代码1.txt')
第 3 行代码获取路径中的文件名,第 4 行代码获取文件夹路径,第 5 行代码获取文件夹路径和文件名并以元组形式返回。
2.操作文件与文件夹
1.查询文件大小
使用 os 库的 path 模块下的getsize(path)
方法可以获取路径中的文件所占内存大小。单位为字符
import os
path = r'E:\书代码\数据1\压缩全.zip'
print(os.path.getsize(path))#获取路径中的文件所占用内存的大小
2.删除文件
os 库中的remove()
函数可用于删除文件。
import os
os.remove(r'E:\书代码\数据1\文件夹201')#删除path中的文件
如果要删除文件夹,则需要使用rmdir()
函数。它只是删除path中最后一层文件夹,不能地柜删除整个path的全部文件夹。
import os
os.rmdir(r'E:\书代码\数据1\文件夹201')#删除path中的最后一层文件夹
3.重命名文件或文件夹
使用 os 库中的rename()
和renames()
函数即可实现对文件或文件夹进行重命名。其使用形式如下:
os.rename(src, dst)
os.renames(src, dst)
功能:rename()
函数修改指定文件夹或文件的名称,renames()
函数递归修改文件夹或文件的名称。
参数 src:表示要修改的文件夹路径或文件路径。
参数 dst:表示修改后的文件夹路径或文件路径。
import os
for i in range(1,201):
old = 'E:/书代码/第9章/数据1/文件夹'+str(i)
new = 'E:/书代码/第9章/数据1/文件夹'+str(i+200)
os.rename(old,new)#对文件或文件夹进行重命名
os.renames('E:/书代码/第9章/数据1/文件夹201','E:/书代码/第9章/数据2/文件夹201')
对文件或文件夹递归进行重命名
第 2~5 行代码使用 for 循环 200 次,分别获取要修改的路径 old 和修改后的路径 new,并使用rename()
函数修改文件夹名称。
第 6 行代码使用renames()
函数将前面第 2~5 行代码执行后得到的文件夹 “E:/ 书代码 / 第 9 章 / 数据 1 / 文件夹 201” 递归修改为 “E:/ 书代码 / 第 9 章 / 数据 2 / 文件夹 201”,从而间接实现了文件的移动功能。
4.复制文件
os 库中的os.link()
函数可用于创建硬链接以实现复制文件。其使用形式如下:
os.link(src, dst)
参数 src:表示要修改的文件夹路径或文件路径。
参数 dst:表示修改后的文件夹路径或文件路径。
import os
os.link('E:/书代码/政府报告合集.pdf','E:/书代码/数据1/政府报告合集.pdf')
执行代码后即可将 “报告合集.pdf” 文件复制到 “E:/ 书代码 / 数据 1” 路径中。
5. 获取文件夹中的全部文件名
使用 os 库中的listdir(路径)
方法即可获取文件夹中的全部文件名(包含文件和文件夹的名称)。结果是以列表的形式输出的路径中的全部内容,
import os
print('相对路径中有: ',os.listdir('.'))#获取路径中的全部文件名
在办公领域中,获取文件夹中的全部文件是较为常见的操作,当需要对一系列的文件进行操作时,可以将这一系列的文件存放在同一个文件夹中,然后通过os.listdir()
方法遍历并获取文件,再对文件进行操作。
import os
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)
第 2 行代码使用file_total_size
来统计所有文件占用的空间,初始时为 0。
第 3 行代码使用os.listdir('.')
获取文件夹内所有文件的名称,并以列表的形式返回作为循环内容,依次赋值给变量 file_name。
第 4 行代码构建每个文件的完整路径,包含路径和文件名。
第 5 行代码通过getsize()
方法获取文件的大小,并将其累加到 file_total_size 变量中。循环结束后输出 file_total_size/1024 的值,输出的值的单位为 KB。
6.判断文件和文件夹
os 库中提供了以下 3 种用于判断 path 是文件还是文件夹的方法。
第 1 种,os.path.exists(path)
。判断 path 所指的文件或文件夹是否存在,如果存在则返回 True,否则返回 False。
第 2 种,os.path.isfile(path)
。判断 path 是否为文件,如果是文件则返回 True,否则返回 False。
第 3 种,os.path.isdir(path)
。判断 path 是否为文件夹,如果是文件夹则返回 True,否则返回 False。
import os
path = r'E:\书代码\数据2\新数据82.txt'
print(os.path.exists(path))#判断path所指的文件或文件夹是否存在
print(os.path.isfile(path))#判断path是否为一个文件
print(os.path.isdir(path))#判断path是否为一个文件夹
当文件夹存在但文件夹中的文件不存在时,执行 3 种方法后都会返回 False。
3.执行其他应用程序
通过 os 库中的 system () 方法实现调用其他代码文件,使得当前代码程序既可执行其他文件,又可获取执行后的结果。
1.命令提示符或终端
在 Windows 系统和 macOS 系统中分别具有命令提示符(cmd)工具和终端工具,其功能是实现在无图形界面的情况下操作计算机,这里主要介绍一下一些命令提示符窗口的部分命令
命令 | 功能描述 |
---|---|
appwiz.cpl | 启动程序和功能 |
calc | 启动计算器 |
control | 启动控制面板 |
shutdown | 自动关机 |
mspaint | 启动画图程序 |
rstrui | 系统还原 |
md | 创建目录 |
regedit.exe | 启动注册表 |
mstsc | 远程桌面连接 |
osk | 启动屏幕键盘 |
copy | 复制文件 |
netstat | 查看网络端口 |
ping | 测试网络连接 |
ftp | 上传文件 |
2.system()方法
os 库中的system(命令)
方法可用于实现命令提示符窗口的命令或终端的命令。
import os
os.system('calc')
os.system(r'D:\Program Files (x86)\Tencent\WeChat\WeChat.exe')
执行该代码后程序将自动启动计算机中的计算器和微信应用程序。
a.py:
a = 0
i =0
while a <1000:
i += 1
a += i
print(i)
input('按下任意键关闭!')
该代码中 i 的值每循环一次都会增加 1,a 每循环一次都会增加 i,因此 a 的值为从 0 开始依次加 1 + 2 + 3 + ……,一直到 a 超过 1000 时输出 a 的值。当在新的代码文件中运行该代码文件(指直接运行 “E:\a.py” 代码文件,而不是将其作为函数来进行调用),可以使用以下代码:
import os
a = 0
a = os.system(r"E:\a.py")
print(a)
第 2 行代码使用system()
方法执行 “E:\a.py” 代码文件,执行后会调用程序窗口运行该代码。
3. popen () 方法
os 库中的popen()
方法可用于获取执行命令后的结果,获取结果的方法与读取文件的方法类似。
import os
a = os.popen(r'E:\a.py').read()
print(a.read())
# 运行结果为:45
第 2 行代码表示执行 “E:\a.py” 代码文件,popen()
方法与system()
方法类似,但system()
方法不能获取执行 “E:\a.py” 代码文件后的输出结果,popen()
方法可获取执行代码文件后返回的结果,并且采用类似于open()
读取文件的方法获取内容,参数r
表示以只读方式打开该文件。
第 3 行代码使用read()
读取 a 的内容。