一、前言
本小节梳理了os常用的一些方法,并介绍一个小案例。
环境说明:Python 3.6、windows11 64位
二、os常用方法
注意:使用方法前需要先调用os库,即import os
。
os.getcwd() # 获取当前目录
os.chdir(path) # 将path设置为当前工作目录,相当于终端的切换路径
os.listdir(path) # path是一个目录,返回目录下的所有文件和文件夹,可以采用相对路径,如path='.'
os.mkdir(path) # 创建一个名为 path 的目录
os.rmdir(path) # 删除目录path。如果目录不存在或不为空,则会分别抛出 FileNotFoundError 或 OSError 异常。要删除整个目录树,可以使用 shutil.rmtree()
os.remove(path) # 删除文件path,如果path是目录,则会引发 IsADirectoryError。
os.rename(old,new) # 重命名文件或目录,新的名字存在会报错
os.replace(old,new)# 重命名文件或目录,如果new是非空目录,将抛出 OSError 异常。如果new已存在且为文件,则进行静默替换
os.stat(path) # 获取文件或文件描述符的状态
os.walk(top) # 生成目录树中的文件名,方式是按上->下或下->上顺序浏览目录树。对于以 top 为根的目录树中的每个目录(包括 top 本身),它都会生成一个三个元素的元组:(dirpath, dirnames, filenames)。
os.environ # 获取系统环境变量
os.path.abspath(path) # 返回path规范化的绝对路径
os.path.basename(path)# 返回path的文件名。
os.path.dirname(path) # 返回文件/目录的目录
os.path.exists(path) # 判断文件/目录是否存在,存在返回 True。
os.path.getatime(path)# 获取文件/目录的最后访问时间。
os.path.getmtime(path)# 获取文件/目录的最后修改时间。
os.path.getsize(path) # 获取文件/目录的大小,以字节为单位。
os.path.isabs(path) # 判断文件/目录是不是绝对路径,是则返回True
os.path.isfile(path) # 判断path是不是文件,是则返回True。
os.path.isdir(path) # 判断path是不是现有的目录,是则返回True。
os.path.join(path,*paths) # 拼接多个路径,依次拼接
os.path.split(path) # 将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,可以是文件或目录,而 head 里是除最后部分外的所有内容。tail 部分不会包含斜杠,head 末尾的斜杠会被去掉,除非它是盘符。
os.path.splitext(path)# 将路径拆分为文件拓展名和剩下的部分,扩展名最多只包含一个句点。
2.1 拆分和拼接路径
拆分路径,将最后一部分拆分出来,可以是带后缀的文件名或者目录。
# 关于os.path.split()的测试
>>> os.path.split('D:\test1\\test2\\testfile.txt')
('D:\test1\\test2', 'testfile.txt')
>>> os.path.split('D:\test1\\test2\\')
('D:\test1\\test2', '')
>>> os.path.split('D:\test1\\test2')
('D:\test1', 'test2')
>>> os.path.split('D:\test1')
('D:', '\test1')
拼接路径,将一个或多个路径拼接在一起,一般是一个目录+一个文件的拼接。
# 关于os.path.join()的测试
>>> os.path.join('D:\\test1','test2\\test3','testfile.txt')
'D:\\test1\\test2\\test3\\testfile.txt'
>>> os.path.join('D:\\test1','test2\\test3\\','testfile.txt') # test2\\test3\\末尾可不加\\
'D:\\test1\\test2\\test3\\testfile.txt'
>>> os.path.join('D:\\test1','\\test2\\test3','testfile.txt') # \\test2\\test3开头加\\拼接到上一个参数的根目录
'D:\\test2\\test3\\testfile.txt'
>>> os.path.join('D:\\test1','\\test2\\test3','\\testfile.txt') # 前面两个拼接完,拼上第3个和拼第2个时同理,拼接到上一个参数的根目录
'D:\\testfile.txt'
>>> os.path.join('D:','test2\\test3','testfile.txt')
'D:test2\\test3\\testfile.txt'
>>> os.path.join('D:\\','test2\\test3\\','testfile.txt') # 第1个参数是盘符需要加\\
'D:\\test2\\test3\\testfile.txt'
2.2 判断文件后缀
# 匹配文件后缀
file_name = 'W020220823719312969888.jpg'
if 'jpg' in file_name:
print('ok')
if file_name.endswith('.jpg'):
print('ok')
if os.path.splitext(file_name)[1] == '.jpg':
print('ok')
如果要当前目录下某一类文件,也可以通过glob.glob()
方法实现。如获取当前目录下的.jpg
文件:
import glob
print(glob.glob('*.jpg'))
如果要获取的目录不是当前目录下的呢?那就使用os.chdir(path)
将目标目录设置为当前目录。
import os,glob
path = '目标目录'
os.chdir(path)
print(glob.glob('*.jpg'))
如果想获取完指定目录下的文件名后再返回一开始的工作目录,则可以使用os.getcwd()
先暂存当前工作目录,等获取完再切回来,参考代码如下:
import os,glob
old_path = os.getcwd()
new_path = '目标目录'
os.chdir(new_path)
print(glob.glob('*.jpg'))
os.chdir(old_path)
三、小案例
可参考之前写过的一篇文章《Python 利用os模块批量修改文件名 并打包成可执行程序》。
通过os模块批量修改文件名,如果是本地有Python环境则可不必打包成可执行程序,直接运行代码即可。如果是给没有Python环境的伙伴则可以考虑打包起来。
<下节预告:debug>
- End -