1 不同操作系统分隔符
在 Windows 操作系统中,文件路径以倒斜杠作为文件夹之间的分隔符。但在 OSX 和 Linux 上,使用的则是正斜杠作为路径分隔符。如果希望让程序适配所有操作系统,就会用到 os.path.join() 函数。
import os
path = os.path.join('usr', 'local', 'sbin')
print(path)
运行结果:
usr\local\sbin
如果在 OS X 或 Linux 上调用这个函数, 就会返回 'usr/local/sbin'。
2 当前运行环境所在路径与切换路径
利用 os.getcwd() 函数,可以获取当前当前运行环境所在路径。而使用 os.chdir() 可以改变这个路径。
current_path=os.getcwd()
print(current_path)
#切换当前所在路径
os.chdir('C:\Program Files')
print(os.getcwd())
运行结果:
F:\python_projects\xxx\excel\file
C:\Program Files
注意: 如果要更改的运行环境所在路径不存在,就会抛出错误:
os.chdir('C:\\not_exist')
运行结果:
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'C:\not_exist'
这时,可以使用 os.makedirs() 创建所有必要的中间文件夹,确保路径存在:
not_exist_path = 'C:\\not_exist\\1'
try:
os.chdir(not_exist_path)
except FileNotFoundError:
os.makedirs(not_exist_path)
os.chdir(not_exist_path)
print(os.getcwd())
运行结果:
C:\not_exist\1
3 路径函数
3.1 os.path 模块路径函数
函数 | 说明 |
---|---|
os.path.abspath(path) | 返回 path 的绝对路径。适用于将相对路径转换为绝对路径。 |
os.path.isabs(path) | 如果 path 是绝对路径,就返回 True;否则返回 False。 |
os.path.relpath(path, start) | 返回从 start 路径到 path 的相对路径。如果没有提供 start 参数,则使用当前运行目录作为开始路径。 |
os.path.basename(path) | 返回 path 参数中最后一个斜杠之后的所有内容。 |
os.path.dirname(path) | 返回 path 参数中最后一个斜杠之前的所有内容。 |
os.path.split(path) | 返回路径中的目录与名称元组。 |
os.path.exists(path) | 是否存在 path 路径。 |
os.path.isfile(path) | path 路径存在,并且是文件。 |
os.path.isdir(path) | path 路径存在,并且是文件夹。 |
3.2 相对路径与绝对路径
os.chdir('C:\\Program Files')
print(os.path.abspath('.'))
print(os.path.abspath('.\\Common Files'))
print(os.path.isabs('.'))
print(os.path.isabs('C:\\Program Files'))
运行结果:
C:\Program Files
C:\Program Files\Common Files
False
True
因为首先使用 os.chdir() 把当前路径切换到了 C:\\Program Files
,所以调用 os.path.abspath() 时, 当前运行所在目录是 C:\\Program Files
, 所以“ 点” 的相对路径表示法所对应的绝对路径就是 C:\\Program Files
。
3.3 返回从 start 路径到 path 的相对路径
print(os.path.relpath('C:\\Program Files','C:\\'))
print(os.path.relpath('C:\\Program Files','C:\\windows\\addins\\'))
运行结果:
Program Files
....\Program Files
3.4 获取路径中的目录与名称
path='C:\Program Files\Common Files\Adobe\CEP\extensions\LogiOptionsAdobe\index.html'
print(os.path.basename(path))
print(os.path.dirname(path))
print(os.path.split(path))
运行结果:
index.html
C:\Program Files\Common Files\Adobe\CEP\extensions\LogiOptionsAdobe
('C:\Program Files\Common Files\Adobe\CEP\extensions\LogiOptionsAdobe', 'index.html')
注意: 如果需要返回路径中的每一部分的名称列表,os.path.split(path) 就不适用啦。我们可以使用 split() 方法来实现:
print(path.split(os.path.sep))
运行结果:
['C:', 'Program Files', 'Common Files', 'Adobe', 'CEP', 'extensions', 'LogiOptionsAdobe', 'index.html']
3.5 路径验证
print(os.path.exists('C:\\Program Files'))
print(os.path.isdir('C:\\Program Files'))
print(os.path.isfile('C:\\Program Files'))
print(os.path.isfile('C:\Program Files\Common Files\Adobe\CEP\extensions\LogiOptionsAdobe\index.html'))
运行结果:
True
True
False
True