Python 常用基础模块:os.path模块
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 常用基础模块:os.path模块相关的知识,希望对你有一定的参考价值。
目录
- 一、os.path模块介绍
- 二、常用方法
- 2.1 exists()方法——判断路径是否存在(准确)
- 2.2 isdir()方法——判断是否为目录
- 2.3 isabs()方法——判断是否为绝对路径
- 2.4 isf ile()方法——判断是否为普通文件
- 2.5 join()方法——拼接路径
- 2.6 abspath()方法——获取绝对路径
- 2.7 basename()方法——从一个路径中提取文件名
- 2.8 dirname()方法——获取路径中的目录
- 2.9 split()方法——分割路径名
- 2.10 splitext()方法——分割文件名和扩展名
- 2.11 supports_unicode_f ilenames 属性——标记文件系统是否支持 Unicode 文件名
一、os.path模块介绍
os 模块是 Python 内置的与操作系统功能和文件系统相关的模块。该模块的子模块 os.path 是专门用于进行路径操作的模块。 常用的路径操作主要有判断目录是否存在、创建目录、删除目录和遍历目录等。
说明:在使用 os.path 模块时,推荐使用字符串 (Unicode) 表示文件名或者路径。由于某些 Unix 操作系统不支持 Unicode 字符串,所以需要使用字节对象;而在 Windows 操作系统中,则推荐所有的应用程序都使用字符串对象来访问文件。
os 模块和它的子模块 os.path 都属于内置模块,不需要安装,直接导入即可使用。在 Python 程序中,使用 import 语句导入 os 模块后,既可以使用 os 模块提供的属性和方法,又可以使用 os.path 模块提供的属性和方法。导入os 模块的代码如下:
import os # 说明:导入 os 模块后,也可以使用其子模块 os.path。
如果在程序中,只涉及到 os.path 模块的内容,也可以直接导入 os.path,代码如下:
import os.path
使用上面的代码导入 os.path 模块后,就可以使用该模块提供的属性和方法了。如果不确定该模块都提供了哪些属性和方法,可以使用 Python 的内置函数 dir() 获取其全部方法列表,代码如下:
import os.path # 操作路径的模块
print(dir(os.path))
程序运行结果如下:
二、常用方法
2.1 exists()方法——判断路径是否存在(准确)
exists() 方法用于判断路径(文件或目录)是否存在,如果存在则返回 True ;不存在则返回 False。如果是断开的符号链接,也返回 False。语法格式如下:
os.path.exists(path)
参数说明:
- path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。
- 返回值:如果给定的路径存在,则返回 True,否则返回 False。
注意:在使用 exists() 方法时,如果某些平台未授予 os.stat() 对所请求文件有执行的权限,即使路径真实存在,使用该方法也会返回 False。
使用 exists() 方法判断保存在 E:\\Code\\lesson
目录下的 main.py
文件是否存在,代码如下:
import os.path # 操作路径的模块
path = r"E:\\Code\\lesson\\main.py" # 文件
if os.path.exists(path): # 判断文件是否存在
# E:\\Code\\lesson\\main.py 文件存在
print(path, "文件存在")
else:
print(path, "文件不存在")
用 exists() 方法判断 E:\\Code\\lesson1
目录是否存在,代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 操作路径的模块
path = r"E:\\Code\\lesson1" # 目录
print(os.path.exists(path)) # False
if os.path.exists(path): # 判断目录是否存在
print(path, "目录存在")
else:
# E:\\Code\\lesson1 目录不存在
print(path, "目录不存在")
2.2 isdir()方法——判断是否为目录
isdir() 方法用于判断指定的路径是否为目录。语法格式如下:
os.path.isdir(path)
参数说明:
- path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。
- 返回值:如果给定的路径是目录,则返回 True,否则返回 False。
向 isdir() 方法中传入绝对路径,判断该路径是否为目录,代码如下:
import os.path # 导入os.path模块
print(os.path.isdir(r'E:/Code/lesson/main.py')) # 判断是否为目录 False
print(os.path.isdir(r'E:/Code/lesson/')) # 判断是否为目录 True
获取指定目录下的全部子目录,首先应用 os.listdir() 方法获取指定路径下的目录和文件列表,然后遍历该列表,并且将各路径进行连接;再判断是否为目录,如果为目录,则添加到指定列表;最后打印该列表,代码如下:
import os # 文件与操作系统相关模块
root = r'E:/Code/lesson'
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') # 打印目录列表
程序运行结果如下:
目录:['E:/Code/lesson\\\\.idea', 'E:/Code/lesson\\\\python-package']
2.3 isabs()方法——判断是否为绝对路径
isabs() 方法用于判断路径是否为绝对路径。语法格式如下:
os.path.isabs(path)
参数说明:
- path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。
- 返回值:如果给定的路径是绝对路径,则返回 True,否则返回 False。
说明:在 Unix 系统中,将以斜杠开头的路径视为绝对路径;而在 Windows 系统中,以去除驱动器号后的(反向) 斜线开头的视为绝对路径。
使用 isabs() 方法分别判断两个文件的路径是否为绝对路径,如果不是绝对路径,则转换为绝对路径并输出,代码如下:
import os.path # 操作路径的模块
path_list = [r'python-package/task1.py', r'E:\\Code\\lesson\\python-package\\demo',
r'E:\\Code\\lesson\\main.py']
for path in path_list: # 遍历目录列表
if not os.path.isabs(path): # 如果不是绝对路径
path = os.path.abspath(path) # 转换为绝对路径
print(path) # 打印各个路径
2.4 isf ile()方法——判断是否为普通文件
isfile() 方法用于判断是否为普通文件。语法格式如下:
os.path.isfile(path)
参数说明:
- path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。
- 返回值:如果给定的路径对应的文件是普通文件,则返回 True,否则返回 False。
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
print(os.path.isfile(r'E:\\Code\\lesson\\main.py')) # 判断是否为普通文件 True
# 说明:如果指定的文件不存在,则返回False。
print(os.path.isfile(r'E:\\Code\\lesson\\main2.py')) # False
path = r'E:\\Code\\lesson' # 目录
filename = 'main.py' # 文件名
# 连接目录和文件名时,不推荐使用字符串拼接方法实现,
# 推荐使用 os.path.join()方法实现,具体用法文本后续小节会详细讲解
print(os.path.isfile(os.path.join(path, filename))) # 判断是否为普通文件 True
2.5 join()方法——拼接路径
join() 方法用于将两个或者多个路径拼接到一起组成一个新的路径。语法格式如下:
os.path.join(path, *paths)
参数说明:
- path:表示要拼接的文件路径。
- *paths:表示要拼接的多个文件路径,这些路径间使用逗号进行分隔。如果在要拼接的路径中,没有一个绝对路径,那么最后拼接出来的将是一个相对路径。
- 返回值:拼接后的路径。
说明:使用 os.path.join() 函数拼接路径时,并不会检测该路径是否真实存在。
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
print(os.path.join(r"E:\\Code\\lesson", "main.py")) # 拼接字符串
# 如果要拼接的路径中,存在多个绝对路径,那么按从左到右顺序,以最后一次出现的绝对路径为准,
# 并且该路径之前的参数都将被忽略,代码如下:
# C:/demo
print(os.path.join('E:/Code', 'E:/Code/lesson', 'Code', 'C:/', 'demo')) # 拼接字符串
2.6 abspath()方法——获取绝对路径
abspath() 方法用于返回文件或者目录的绝对路径。语法格式如下:
os.path.abspath(path)
参数说明:
- path:表示要获取绝对路径的相对路径,可以是文件也可以是目录。
- 返回值:返回获取到的绝对路径。
说明:绝对路径是指在使用文件时指定文件的实际路径。它不依赖于当前工作目录。
注意:abspath() 方法在获取实际路径时,并不会检查路径是否真实存在,只是把当前文件目录与 abspath() 方法给定的路径进行拼接。
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
# E:\\Code\\lesson\\python-package\\demo4_os_path.py
print(os.path.abspath(r'demo4_os_path.py')) # 打印绝对路径
# 使用abspath() 方法获取当前Python 文件的绝对路径,代码如下:
print(os.path.abspath(os.path.basename(__file__)))
print(os.path.abspath(__file__))
2.7 basename()方法——从一个路径中提取文件名
basename() 方法用于从一个路径中提取文件名。当指定的路径是一个不包括文件名的路径(如 E:\\Code\\lesson\\
) 时,返回空字符串。语法格式如下:
os.path.basename(path)
参数说明:
- path:表示要提取文件名的路径。
- 返回值:返回提取后的文件名。
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
# message.txt
print(os.path.basename(r"demo\\message.txt")) # 打印文件名message.txt
path1 = 'e:/demo/test.txt'
path2 = 'e:/demo'
path3 = r'E:/Code/lesson/'
print(os.path.basename(path1)) # test.txt
print(os.path.basename(path2)) # demo
# 如果path 以/或 \\ 结尾,那么就会返回空值
print(os.path.basename(path3)) # ""
2.8 dirname()方法——获取路径中的目录
dirname() 方法用于从一个路径中提取目录。它相当于使用 os.path.split() 方法分割路径后,得到的第一个元素。语法格式如下:
os.path.dirname(path)
参数说明:
- path:表示要提取目录的路径。
- 返回值:返回提取后的目录。
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
print(os.path.dirname(r"E:\\Code\\lesson\\python-package\\demo\\message.txt"))
print(os.path.dirname(r"demo/message.txt"))
2.9 split()方法——分割路径名
split() 方法用于从一个路径中分割出目录和文件名。语法格式如下:
os.path.split(path)
参数说明:
- path:表示要分割的路径,可以采用绝对路径,也可以采用相对路径。
- 返回值:返回一个元组,与 (os.path.dirname()、os.path.basename()) 返回的元组相同。如果指定的是一个相对路径,并且以斜杠结尾,则返回的元组的第二个元素为空。
使用 split() 方法从绝对路径中分割出盘符、各个文件夹名和文件名,示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
lesson_path = r'E:/Code/lesson' # 代码的路径
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) # 打印分隔结果
2.10 splitext()方法——分割文件名和扩展名
splitext() 方法用于从一个路径中分割基本文件名和扩展名。语法格式如下:
os.path.splitext(path)
参数说明:
- path:表示要分割的路径,可以采用绝对路径,也可以采用相对路径。
- 返回值:返回一个元组,它的第一个元素为字符串表示的基本文件名(路径中除扩展名以外的部分),第二个元素为字符串表示的扩展名(包括
.
号)。如果指定的路径中不包括扩展名,则返回元组的第二个元素为空字符串。
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
print(os.path.splitext(r'E:/amo/test/pdf/list.docx')) # 分割绝对路径
print(os.path.splitext(r'E:/amo/test/pdf/')) # 分割没有文件名的绝对路径
print(os.path.splitext(r'amo/mot_cn.txt')) # 分割相对路径
word_path = r'E:/amo/test/pdf/list.docx' # Word文档的路径
split_path = os.path.splitext(word_path) # 分割Word文档的路径
pdf_path = split_path[0] + '.pdf' # 组合PDF文档的路径
print(f'生成的PDF文档路径:pdf_path')
2.11 supports_unicode_f ilenames 属性——标记文件系统是否支持 Unicode 文件名
supports_unicode_filenames 属性用于标记当前的文件系统是否支持 Unicode 文件名。语法格式如下:
os.path.supports_unicode_filenames
参数说明:
- 返回值:如果文件系统支持 Unicode 文件名,则返回值为 True。
使用 supports_unicode_filenames 属性判断当前系统是否支持 Unicode 文件名。如果支持则创建 座右铭.txt
文件,否则创建 mot.txt
文件,代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022-07-04 0:15
# @Author : AmoXiang
# @File : demo4_os_path.py
# @Software: PyCharm
# @Blog : https://blog.csdn.net/xw1680
import os.path # 导入os.path模块
filename = '' # 保存文件名的变量
print(os.path.supports_unicode_filenames) # True
if os.path.supports_unicode_filenames: # 判断是否支持Unicode文件名
filename = r'座右铭.txt'
else:
filename = r'mot.txt'
open(filename, 'w') # 创建或打开文件
# 文件名为: 座右铭.txt
print('文件名为:', filename) # 打印文件名
以上是关于Python 常用基础模块:os.path模块的主要内容,如果未能解决你的问题,请参考以下文章
Python基础——文件系统(os模块和os.path模块)
Python基础——文件系统(os模块和os.path模块)