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'
可以看到,原本当前工作路径为 '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'
了解了当前工作目录的具体含义之后,接下来介绍路径和相对路径各自的含义和用法。什么是路径与相对路径
明确一个文件所在的路径,有 2 种表示方式,分别是:
路径:总是从根文件夹开始,Window 系统中以盘符(C:、D:)作为根文件夹,而 OS X 或者 Linux 系统中以 / 作为根文件夹。
相对路径:指的是文件相对于当前工作目录所在的位置。例如,当前工作目录为 "C:\Windows\System32",若文件 demo.txt 就位于这个 System32 文件夹下,则 demo.txt 的相对路径表示为 ".\demo.txt"(其中 .\ 就表示当前所在目录)。
在使用相对路径表示某文件所在的位置时,除了经常使用 .\ 表示当前所在目录之外,还会用到 ..\ 表示当前所在目录的父目录。

图 1 相对路径和路径
以图 1 为例,如果当前工作目录设置为 C:\bacon,则这些文件夹和文件的相对路径和路径,就对应为该图右侧所示的样子。
Python处理路径和相对路径
Python os.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'
注意,由于读者的系统文件和文件夹可能与我的不同,所以读者不必完全遵照本节的例子,根据自己的系统环境对本节代码做适当调整即可。
除此之外,如果同时需要一个路径的目录名称和基本名称,就可以调用 os.path.split() 获得这两个字符串的元组,例如:
>>> path = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.split(path)
('C:\\Windows\\System32', 'calc.exe')
注意,可以调用 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')
True
- 随机文章
- 马尔代夫首都火灾(马尔代夫首都发生火灾,数十人受伤)
- 东吉尔湖马尔代夫(东吉尔湖为您带来马尔代夫的无限美好)
- 兔子军舰马尔代夫(后的:兔子装甲车在马尔代夫城市游荡)
- 新沂马尔代夫在哪(新沂有新马尔代夫:梦幻岛国不用远足)
- 吉林 马尔代夫(吉林全新水上世界:马尔代夫!)
- 海南马尔代夫岛屿(海南建设人造岛屿打造中国版马尔代夫)
- 永州马尔代夫水库(永州市马尔代夫水库一级洪水响应启动)
- 广州马尔代夫指哪(广州马尔代夫是哪个国家的旅游胜地?)
- 奥静 马尔代夫(奥静集团进驻马尔代夫扩大海外投资)
- 军人 马尔代夫(驻外军人为马尔代夫援建医院)
- 琥珀冰川马尔代夫(马尔代夫的琥珀冰川:神秘的地球之窗)
- 曼德 马尔代夫(探索马尔代夫珊瑚礁奇观:曼德岛)
- 邢台马尔代夫钓鱼(邢台男子在马尔代夫海岛享受钓鱼乐趣)
- 郴州的小马尔代夫(小马尔代夫竟然藏在湖南省郴州市?!)
- 菲律宾议马尔代夫(菲律宾考虑向马尔代夫提供游客通行证)
- 嘉嘉 马尔代夫(嘉嘉在马尔代夫度假:天堂般的海岛之旅)
- 四女 马尔代夫(四位女游客马尔代夫旅游经历分享)
- 悉尼 马尔代夫(悉尼对马尔代夫的旅游需求增加)
- 荆州马尔代夫失火(荆州旅行团马尔代夫度假村发生大火!)
- 西沙 马尔代夫(西沙与马尔代夫:两个美丽岛国的交流与合作)
- 马尔代夫全款退回(马尔代夫旅游:全款退回,无忧出行!)
- 马尔代夫主题美食(美食天堂:探访马尔代夫独特美食文化)
- 马尔代夫别墅隔音(马尔代夫度假屋带隔音,环境清幽怡人)
- 马尔代夫单人报团(独自前往马尔代夫:单人旅行圆梦之选)
- 马尔代夫丽世别墅(马尔代夫丽世别墅:享受梦幻度假生活)
- 马尔代夫唯逸酒店(唯逸无与伦比!探索马尔代夫唯逸酒店)
- 王毅 马尔代夫(王毅访马尔代夫:愿支持和帮助小岛国家发展)
- 道具马尔代夫美景(探秘马尔代夫最美景点,尽赏视觉盛宴)
- 马尔代夫北方游泳(畅游马尔代夫北部海域,探索海洋奇观)
- 马尔代夫国家女人(马尔代夫妇女在社会与政治中的重要性)
