Python常用基础模块之os.path模块详解

 更新时间:2023年08月01日 11:24:42   作者:Amo Xiang  
这篇文章主要介绍了Python常用基础模块之os.path模块详解,os模块的子模块os.path 是专门用于进行路径操作的模块,常用的路径操作主要有判断目录是否存在、创建目录、删除目录和遍历目录等,需要的朋友可以参考下

一、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.path模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论