美图欣赏2022/07/14
os模块是Python标准库Python标准库Python标准库中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法处理文件和目录
导入os标准库
import os
os模块属于内置模块,不需要安装,直接导入即可使用。导入os模块后,就可以使用该模块提供的属性和方法
1.os模块
1.1返回当前工作目录
os.getcwd()
getcwd()方法用于返回表示当前工作目录的字符串(当前工作目录是指当前文件所在的目录)
例如,在C:\Users\X2001565\Desktop\Demo.py
文件中,编写以下代码:
import os
# 打印当前工作目录
print(os.getcwd()) # C:\Users\X2001565
1.2列出目录的内容(以列表的形式返回指定路径下的目录名和文件名)
# path表示一个路径,用于指定要获取的文件和目录的根目录,不能是文件路径
os.listdir(path)
listdir()方法用于返回指定路径下的文件和目录的名称(不包括子孙目录)
例如,C:\Users\X2001565\Desktop\Pure supplier LT项目的目录结构如下图所示:
使用listdir()方法获取指定路径下的目录和文件,代码如下所示:
import os
# 获取指定路径下的目录和文件列表
path = os.listdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目')
print('目录下包括:', path)
程序运行结果如下:
目录下包括:['Input & Output栏位关系梳理', 'pure_ct2r.py', 'pure_ftp.py', 'supply.txt', 'timer.py']
注意:
使用listdir()方法将获取到的指定路径下的目录和文件分别输出,代码如下:
import os
root = r'C:\Users\X2001565\Desktop\Pure supplier LT项目'
# 获取指定路径下的目录和文件列表
path = os.listdir(root)
# 路径列表
list_dir = []
# 文件列表
list_file = []
for item in path: # 遍历获取到的目录和文件列表
p = os.path.join(root, item) # 连接目录
if os.path.isdir(p): # 判断是否为目录
list_dir.append(p)
elif os.path.isfile(p): # 判断是否为文件
list_file.append(p)
print('目录:', list_dir) # 打印目录列表
print('文件:', list_file) # 打印文件列表
程序运行结果如下:
目录: ['C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\Input & Output栏位关系梳理']
文件: ['C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\pure_ct2r.py', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\pure_ftp.py', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\supply.txt', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\timer.py']
1.3创建一级目录
# path用于指定要创建目录的路径
os.mkdir(path)
mkdir()方法用于创建一级目录
说明: 使用mkdir()方法只能创建一级目录,即创建目录C:\Users\X2001565\Desktop\Pure supplier LT项目\Test,且目录C:\Users\X2001565\Desktop\Pure supplier LT项目必须是存在的
例如,使用mkdir()方法创建指定的一级目录,代码如下:
import os
os.mkdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test')
程序执行结果如下:
如果文件夹已经存在,就会报错,所以在创建文件夹之前,需要使用os.path.exists(path)函数判断文件夹是否存在
import os
if not os.path.exists(os.path.join(r'C:\Users\X2001565\Desktop\Pure supplier LT项目', 'test')):
os.mkdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test')
扩展补充: os.makedirs(path)创建递归目录
import os
if not os.path.exists(os.path.join(r'C:\Users\X2001565\Desktop\Pure supplier LT项目', 'test1\tt')):
os.makedirs(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test1\tt')
程序执行结果如下:
点击test1文件夹,结果如下所示
1.4删除空目录
# path表示要删除的目录
os.rmdir(path)
rmdir()方法用于删除空目录
例如,删除C:\Users\X2001565\Desktop\Pure supplier LT项目路径下的空文件夹Test
代码如下所示:
import os
# 指定要删除的目录
path = r'C:\Users\X2001565\Desktop\Pure supplier LT项目\Test'
'''
注意:如果要删除的目录不存在,那么将抛出"FileNotFoundError: [WinError 2] 系统找不到指定的文件"异常
因此,在执行os.rmdir()方法前,建议先判断该路径是否存在,可以使用os.path.exists()方法判断
'''
if os.path.exists(path): # 判断目录是否存在
os.rmdir(path) # 删除目录
print('目录删除成功!')
else:
print('该目录不存在!')
程序运行结果如下:
目录删除成功!
1.5重命名
os.rename('需要进行重命名的文件或目录的路径','用于指定新的文件或目录名称的路径')
rename()方法用于将文件或目录重命名
例如,使用 rename()方法将C:\Users\X2001565\Desktop\Pure supplier LT项目\
目录下的test.py文件重命名为new_test.py
代码如下:
import os
os.rename(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py',r'C:\Users\X2001565\Desktop\Pure supplier LT项目\new_test.py')
程序运行结果如下:
1.6删除文件
os.remove('文件名.py')
例如,删除Test.py脚本文件(文件所在位置: C:\Users\X2001565\Desktop\Pure supplier LT项目)
代码如下所示:
import os
# 获取当前工作目录
os.getcwd() # 'C:\\Users\\X2001565'
# 将当前工作目录更改到Test.py脚本文件所在目录
os.chdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目')
# 删除Test.py脚本文件
os.remove('Test.py')
1.7执行系统命令
os.system(path)
例:os.system执行.py文件
import os
# 错误写法,没声明文件类型,默认按系统文件原始格式打开
os.system(r'E:\start.py')
# 正确写法,声明定义为Python文件,Python运行
os.system(r'python E:\start.py')
1.8更改当前工作目录
# path用于指定文件路径
os.chdir(path)
chdir()方法用于更改当前工作目录为指定的路径
例如,使用chdir()方法将当前工作目录更改到D盘根目录下,代码如下:
import os
print('更改前的当前工作目录:', os.getcwd())
os.chdir(r'D:/') # 将当前工作目录更改到Z盘根目录
print('更改后的当前工作目录:', os.getcwd())
程序运行结果如下:
更改前的当前工作目录: C:\Users\X2001565
更改后的当前工作目录: D:\
1.9遍历目录中的所有文件
os.walk(path)
walk()方法用于遍历目录树,返回的是一个由路径、文件夹列表、文件列表组成的元组(当前目录的名称,当前目录中子目录的列表,当前目录中文件的列表)
例如,使用 walk()方法遍历当前目录,代码如下:
import os
tuples = os.walk('./')
# 通过for循环输出遍历结果
for tuple1 in tuples:
print(tuple1) # # 打印每一级目录的元组
遍历当前目录,分别输出指定目录下的子目录及文件,不存在子目录或者文件时,显示无,代码如下:
import os
# 遍历当前目录
tuples = os.walk('./')
# 通过for循环打印遍历结果
for root, dirs, files in tuples:
print('文件目录:', root) # 打印文件目录
print('子目录:', dirs if dirs else '无') # 打印子目录
print('文件:', files if files else '无') # 打印文件
2.os.path模块
os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块的子模块os.path是专门用于进行路径操作的模块
os模块和它的子模块os.path都属于内置模块,不需要安装,直接导入即可使用
导入os 模块的代码如下:
# 导入os模块后,也可以使用其子模块os.path
import os
如果在程序中,只涉及到os.path模块的内容,也可以直接导入os.path,代码如下:
import os.path
2.1判断路径是否存在
# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.exists(path)
exists()方法用于判断路径(文件或目录)是否存在,如果存在则返回True;不存在则返回False
例如,使用 exists()方法判断保存在C:\Users\X2001565\Desktop\Pure supplier LT项目目录下的test.py文件是否存在
代码如下:
import os.path
path = r"C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py" # 文件路径
# 判断文件是否存在
if os.path.exists(path):
print(path, "文件存在")
else:
print(path, "文件不存在")
程序执行结果如下所示:
C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py 文件存在
用exists()方法判断C:\Users\X2001565\Desktop\Pure supplier LT项目\test目录是否存在,代码如下:
import os.path
path = r"C:\Users\X2001565\Desktop\Pure supplier LT项目\test" # 目录
print(os.path.exists(path)) # True
# 判断目录是否存在
if os.path.exists(path):
print(path, "目录存在")
else:
print(path, "目录不存在")
程序运行结果如下所示:
True
C:\Users\X2001565\Desktop\Pure supplier LT项目\test 目录存在
2.2判断是否为目录
# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.isdir(path)
isdir()方法用于判断指定的路径是否为目录(文件夹),如果给定的路径是目录,则返回True,否则返回 False
案例1
代码如下:
import os.path
# 判断是否为目录
print(os.path.isdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目')) # True
print(os.path.isdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py')) # False
案例2
获取指定目录下的全部子目录,首先应用os.listdir()方法获取指定路径下的目录和文件列表,然后遍历该列表,并且将各路径进行连接;再判断是否为目录,如果为目录,则添加到指定列表;最后打印该列表,代码如下:
import os
root = r'C:\Users\X2001565\Desktop\Pure supplier LT项目'
# 获取指定路径下的目录和文件列表
path = os.listdir(root)
# 路径列表
list_dir = []
# 遍历获取到的目录和文件列表
for item in path:
p = os.path.join(root, item) # 连接目录
if os.path.isdir(p): # 判断是否为目录
list_dir.append(p)
# 打印目录列表
print(f'目录:{list_dir}')
程序运行结果如下所示:
目录:['C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\Input & Output栏位关系梳理', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\test']
2.3判断是否为绝对路径
# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.isabs(path)
isabs()方法用于判断路径是否为绝对路径,如果给定的路径是绝对路径,则返回True,否则返回 False
例如,使用isabs()方法分别判断两个文件的路径是否为绝对路径,如果不是绝对路径,则转换为绝对路径并输出,代码如下:
import os.path
path_list = [r'python-package\task1.py', r'C:\Users\X2001565\Desktop\demo',
r'C:\Users\X2001565\Desktop\main.py']
# 遍历目录列表
for path in path_list:
# 如果不是绝对路径
if not os.path.isabs(path):
# 转换为绝对路径
path = os.path.abspath(path)
# 打印各个路径
print(path)
程序运行结果如下所示:
C:\Users\X2001565\Desktop\python-package\task1.py
2.4判断是否为普通文件
# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.isfile(path)
isfile()方法用于判断是否为普通文件,如果给定的路径对应的文件是普通文件,则返回True,否则返回False
import os.path
# 判断是否为普通文件
print(os.path.isfile(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\pure_ftp.py')) # True
# 如果指定的文件不存在,则返回False
print(os.path.isfile(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\pure_ftp123.py')) # False
# 目录
path = r'C:\Users\X2001565\Desktop\Pure supplier LT项目'
filename = 'test.py' # 文件名
# 连接目录和文件名时,不推荐使用字符串拼接方法实现
# 推荐使用os.path.join()方法实现
# 判断是否为普通文件
print(os.path.isfile(os.path.join(path, filename))) # True
2.5拼接路径
# path表示要拼接的文件路径,路径间使用逗号进行分隔
os.path.join(path1,path2,...)
join()方法用于将两个或者多个路径拼接到一起组成一个新的路径
注意:使用os.path.join()函数拼接路径时,并不会检测该路径是否真实存在
示例代码如下:
import os.path
# 拼接字符串
# D:\Code\Hudas\Hello.py
print(os.path.join(r"D:\Code\Hudas", "Hello.py"))
'''
如果要拼接的路径中,存在多个绝对路径,那么按从左到右顺序,以最后一次出现的绝对路径为准
并且该路径之前的参数都将被忽略,代码如下:
'''
# C:/demo
print(os.path.join('E:/Code', 'E:/Code/lesson', 'Code', 'C:/', 'demo'))
2.6获取绝对路径
# path表示要获取绝对路径的相对路径,可以是文件也可以是目录
# 绝对路径是指在使用文件时指定文件的实际路径,它不依赖于当前工作目录
os.path.abspath(path)
abspath()方法用于返回文件或者目录的绝对路径
注意:abspath()方法在获取实际路径时,并不会检查路径是否真实存在,只是把当前文件目录与 abspath()方法给定的路径进行拼接
import os.path
# 打印绝对路径
# C:\Users\X2001565\Desktop\test.py
print(os.path.abspath(r'test.py'))
# 使用abspath()方法获取当前Python文件的绝对路径,代码如下:
'''
注意:只有当在脚本中执行的时候,os.path.abspath(__file__)才会起作用,因为该命令是获取的当前执行脚本的完整路径
'''
print(os.path.abspath(os.path.basename(__file__)))
print(os.path.abspath(__file__))
2.7从一个路径中提取文件名
# path表示要提取文件名的路径
os.path.basename(path)
basename()方法用于从一个路径中提取文件名,即返回提取后的文件名(获取完整路径当中的主体部分)。当指定的路径是一个不包括文件名的路径时,则返回空字符串
import os.path
# 打印文件名message.txt
print(os.path.basename(r"demo\message.txt"))
path1 = 'e:/demo/test.txt'
path2 = 'e:/demo'
path3 = r'E:/Code/Hudas/'
print(os.path.basename(path1)) # test.txt
print(os.path.basename(path2)) # demo
# 如果path 以/或 \ 结尾,那么就会返回空值
print(os.path.basename(path3)) # ""
2.8获取路径中的目录
# path表示要提取目录的路径
os.path.dirname(path)
dirname()方法用于从一个路径中提取目录(返回提取后的目录)
import os.path
# 获取完整路径当中的目录部分
# D:\Code\Hudas\python\demo
print(os.path.dirname(r"D:\Code\Hudas\python\demo\message.txt"))
# Hudas
print(os.path.dirname(r"Hudas/message.txt"))
2.9分割路径名
# path表示要分割的路径,可以采用绝对路径,也可以采用相对路径
os.path.split(path)
split()方法用于从一个路径中分割出目录和文件名,返回一个元组,如果指定的是一个相对路径,并且以斜杠结尾,则返回的元组的第二个元素为空
例如,使用split()方法从绝对路径中分割出盘符、各个文件夹名和文件名,示例代码如下:
import os.path
# 代码的路径
lesson_path = r'D:/Code/Hudas/test'
folders = []
# 分割驱动器和目录
drive, path_and_file = os.path.splitdrive(lesson_path)
# 获取驱动器中的盘符
folders.append(drive[0])
# 分割路径和文件名
path, file = os.path.split(path_and_file)
# 处理路径
if path != '':
# 将路径按/分隔
for i in path.split('/'):
if i != '':
folders.append(i)
# 处理文件名
if file != '':
folders.append(file)
# 打印分隔结果
print(folders) # ['D', 'Code', 'Hudas', 'test']
2.10分割文件名和扩展名
# path表示要分割的路径,可以采用绝对路径,也可以采用相对路径
os.path.splitext(path)
splitext()方法用于从一个路径中分割基本文件名和扩展名,返回一个元组,它的第一个元素为字符串表示的基本文件名(路径中除扩展名以外的部分),第二个元素为字符串表示的扩展名(包括 .
号)
如果指定的路径中不包括扩展名,则返回元组的第二个元素为空字符串
import os.path
# 分割绝对路径
# ('C:\\Users\\X2001565\\Desktop\\list', '.docx')
print(os.path.splitext(r'C:\Users\X2001565\Desktop\list.docx'))
# 分割没有文件名的绝对路径
# ('D:/Hudas/test/pdf/', '')
print(os.path.splitext(r'D:/Hudas/test/pdf/'))
# 分割相对路径
# ('Desktop\\test', '.txt')
print(os.path.splitext(r'Desktop\test.txt'))
# Word文档的路径
word_path = r'C:\Users\X2001565\Desktop\list.docx'
# 分割Word文档的路径
split_path = os.path.splitext(word_path)
# 组合PDF文档的路径
pdf_path = split_path[0] + '.pdf'
print(f'生成的PDF文档路径:{pdf_path}') # 生成的PDF文档路径:C:\Users\X2001565\Desktop\list.pdf
2.11获取文件的大小
os.path.getsize(path)
getsize()方法用于获取文件的大小
例如,获取C:\Users\X2001565\Desktop\Pure supplier LT项目目录下test.py文件的大小,代码如下:
import os
os.path.getsize(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py')