说说在 Python 中如何处理文件系统路径

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

发布了606 篇原创文章 · 获赞 677 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/104032055