Python绝对路径和相对路径详解

在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。

什么是当前工作目录

每个运行在计算机上的程序,都有一个“当前工作目录”(或cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。

注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。

在Python中,利用os.getcwd()函数可以取得当前工作路径的字符串,还可以利用os.chdir()改变它。例如,在交互式环境中输入以下代码:

>>> import os>>> os.getcwd()'C:\\Users\\mengma\\Desktop'>>> os.chdir('C:\\Windows\\System32')>>> os.getcwd()'C:\\Windows\\System32'123456复制代码类型:[python]

可以看到,原本当前工作路径为'C:\\Users\\mengma\\Desktop'(也就是桌面),通过os.chdir()函数,将其改成了'C:\\Windows\\System32'。

需要注意的是,如果使用os.chdir()修改的工作目录不存在,Python解释器会报错,例如:

>>> os.chdir('C:\\error')
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
 os.chdir('C:\\error')
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'C:\\error'12345复制代码类型:[python]

了解了当前工作目录的具体含义之后,接下来介绍绝对路径和相对路径各自的含义和用法。

什么是绝对路径与相对路径

明确一个文件所在的路径,有2种表示方式,分别是:

绝对路径:总是从根文件夹开始,Window系统中以盘符(C:、D:)作为根文件夹,而OSX或者Linux系统中以/作为根文件夹。

相对路径:指的是文件相对于当前工作目录所在的位置。例如,当前工作目录为"C:\Windows\System32",若文件demo.txt就位于这个System32文件夹下,则demo.txt的相对路径表示为".\demo.txt"(其中.\就表示当前所在目录)。

在使用相对路径表示某文件所在的位置时,除了经常使用.\表示当前所在目录之外,还会用到..\表示当前所在目录的父目录。

以图1为例,如果当前工作目录设置为C:\bacon,则这些文件夹和文件的相对路径和绝对路径,就对应为该图右侧所示的样子。

Python处理绝对路径和相对路径

Pythonos.path模块提供了一些函数,可以实现绝对路径和相对路径之间的转换,以及检查给定的路径是否为绝对路径,比如说:

调用os.path.abspath(path)将返回path参数的绝对路径的字符串,这是将相对路径转换为绝对路径的简便方法。

调用os.path.isabs(path),如果参数是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。

调用os.path.relpath(path,start)将返回从start路径到path的相对路径的字符串。如果没有提供start,就使用当前工作目录作为开始路径。

调用os.path.dirname(path)将返回一个字符串,它包含path参数中最后一个斜杠之前的所有内容;调用os.path.basename(path)将返回一个字符串,它包含path参数中最后一个斜杠之后的所有内容。

在交互式环境中尝试上面提到的函数:

>>> os.getcwd()'C:\\Windows\\System32'>>> os.path.abspath('.')'C:\\Windows\\System32'>>> os.path.abspath('.\\Scripts')'C:\\Windows\\System32\\Scripts'>>> os.path.isabs('.')False>>> os.path.isabs(os.path.abspath('.'))True>>> os.path.relpath('C:\\Windows', 'C:\\')'Windows'>>> os.path.relpath('C:\\Windows', 'C:\\spam\\eggs')'..\\..\\Windows'>>> path = 'C:\\Windows\\System32\\calc.exe'>>> os.path.basename(path)'calc.exe'>>> os.path.dirname(path)'C:\\Windows\\System32'12345678910111213141516171819复制代码类型:[python]

注意,由于读者的系统文件和文件夹可能与我的不同,所以读者不必完全遵照本节的例子,根据自己的系统环境对本节代码做适当调整即可。

除此之外,如果同时需要一个路径的目录名称和基本名称,就可以调用os.path.split()获得这两个字符串的元组,例如:

>>> path = 'C:\\Windows\\System32\\calc.exe'>>> os.path.split(path)
('C:\\Windows\\System32', 'calc.exe')123复制代码类型:[python]

注意,可以调用os.path.dirname()和os.path.basename(),将它们的返回值放在一个元组中,从而得到同样的元组。但使用os.path.split()无疑是很好的快捷方式。

同时,如果提供的路径不存在,许多Python函数就会崩溃并报错,但好在os.path模块提供了以下函数用于检测给定的路径是否存在,以及它是文件还是文件夹:

如果path参数所指的文件或文件夹存在,调用os.path.exists(path)将返回True,否则返回False。

如果path参数存在,并且是一个文件,调用os.path.isfile(path)将返回True,否则返回False。

如果path参数存在,并且是一个文件夹,调用os.path.isdir(path)将返回True,否则返回False。

下面是在交互式环境中尝试这些函数的结果:

>>> os.path.exists('C:\\Windows')True>>> os.path.exists('C:\\some_made_up_folder')False>>> os.path.isdir('C:\\Windows\\System32')True>>> os.path.isfile('C:\\Windows\\System32')False>>> os.path.isdir('C:\\Windows\\System32\\calc.exe')False>>> os.path.isfile('C:\\Windows\\System32\\calc.exe')True123456789101112复制代码类型:[python]
(0)

相关推荐

  • python 批量生成目录

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/python 批量生成目录 作者:融水公子 rsgz Python3 教程 python教程 http://www.rsgz.top/post/9 ...

  • 还你系统空间的 Python 小程序

    Windows 系统用久了,磁盘中就会产生大量的"垃圾"文件.这些文件有的是程序使用过的临时文件,有的是操作记录和日志信息等.因为往往不能被有效地清理干净,越积越多,导致用户的可用 ...

  • python笔记4-遍历文件夹目录os.walk()

    前言 如何遍历查找出某个文件夹内所有的子文件呢?并且找出某个后缀的所有文件 一.walk功能简介 1.os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. 2.walk( ...

  • Python之文件

    文件 打开文件 函数open的参数mode的最常见取值 打开方式 读写文件 文件write调用返回了写入的字符数. 文件的读取 随机存取 关闭文件 迭代文件内容 文件路径 用 os.makedirs( ...

  • 《企业碳中和路径图》发布 详解减碳技术“中国智慧”

    文章导读 近日,全球首份由联合国机构发布的全面指导企业实现碳中和的报告<企业碳中和路径图>由联合国驻华代表处正式发布.报告深度分析了能源使用侧排放最为密集的6大基础设施行业:交通运输.农业 ...

  • 用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!

    大家好,在之前的Python办公自动化系列文章中,我们已经介绍了两个Python操作Excel的库openpyxl与xlwings,并且相信大家已经了解这两者之间的异同. 但是在Python中操作Ex ...

  • Python运维自动化psutil 模块详解(超级详细)

    psutil 模块 参考官方文档:https://pypi.org/project/psutil/ 一.psutil简介 psutil是一个开源且跨平台(http://code.google.com/ ...

  • python测试开发django-11.模型models详解

    前言 Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库 只需要在settings ...

  • 超全整理|Python 操作 Excel 库常用操作详解

    来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openpyxl 操作Excel,其实在Python中还有其他可以直接操作 Excel 文件的库 ...

  • Python使用pyodbc访问数据库操作方法详解

    本文实例讲述了Python使用pyodbc访问数据库操作方法. 数据库连接 数据库连接网上大致有两种方法,一种是使用pyodbc,另一种是使用win32com.client,测试了很多遍,最终只有py ...

  • Python os.join方法(用法详解)

    本文整理汇总了后端语言Python中os.join方法的典型用法及代码示例,这里的代码示例可能为您提供帮助.也可以进一步了解该方法所在模块os的用法示例. 如果想了解web前端内容,包括html,cs ...

  • Python可视化库Matplotlib绘图入门详解

    Matplotlib是Python的绘图库,其中的pyplot包封装了很多画图的函数. Matplotlib.pyplot 包含一系列类似 MATLAB 中绘图函数的相关函数.每个 Matplotli ...

  • Python Tkinter Grid布局管理器详解

    Grid(网格)布局管理器会将控件放置到一个二维的表格里.主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件. 注意:不要试图在一个主窗口中混合使用pack和grid (1) ...

  • Python基础入门第二节——正则表达式详解!

    Python基础入门第二节——正则表达式详解!