os.path是python的一个内部组件用来操作文件的文件名,对文件名字符串进行解析。
在os模块中定义了一些变量名来帮助对文件名的处理主要有以下几个变量。
os.sep:文件分隔符
os.pardir:上级目录标志符为'..'
os.curdir:当前目录标识符为'.'
os.extsep:文件的后缀名分割符。
>>> print(os.sep)
/>>> print(os.extsep)
.>>> print(os.curdir)
.>>> print(os.pardir)
..
path组件根据以上定义的变量来处理文件名字符串。path组件包含以下函数对文件名进行处理。
split()函数将文件名进行分割返回值为一个元组。返回的结果以最后的一个os.sep进行分割。
1 PATHS =[2 '/one/two/three',3 '/one/two/three/',4 '/',5 '.',6 '',7 ]8 for path inPATHS:9 print('{!r:>17}:{}'.format(path,os.path.split(path)))10
11
12 '/one/two/three':('/one/two', 'three')13 '/one/two/three/':('/one/two/three', '')14 '/':('/', '')15 '.':('', '.')16 '':('', '')
basename和dirname返回的结果二者结合在一起正好是split()返回的结果。basename返回的为上面元组的第二部分,dirname返回的是第一部分。
for path inPATHS:print('basename{!r:>17}:{}'.format(path,os.path.basename(path)))print('dirname{!r:>17}:{}'.format(path,os.path.dirname(path)))-------------------------------basename'/one/two/three':three
dirname'/one/two/three':/one/two
basename'/one/two/three/':
dirname'/one/two/three/':/one/two/three
basename'/':
dirname'/':/basename'.':.
dirname'.':
basename'':
dirname'':
splittext类似split()函数根据os.extsep中定义的字符分割字符串。
PATHS =['filename.txt','filename','/path/to/filename.txt','/','','my-archive.tar.gz','no-extension.',
]for path inPATHS:print('{!r:>21} : {!r}'.format(path, os.path.splitext(path)))------------------------------------------------------
'filename.txt' : ('filename', '.txt')'filename' : ('filename', '')'/path/to/filename.txt' : ('/path/to/filename', '.txt')'/' : ('/', '')'' : ('', '')'my-archive.tar.gz' : ('my-archive.tar', '.gz')'no-extension.' : ('no-extension', '.')
commonprefix和commonpath函数返回一组文件名相同的前缀。不同之处在与commonprefix没有将路径的分割符考虑进来
paths = ['/one/two/three/four','/one/two/threefold','/one/two/three/',
]print('commonprefix',os.path.commonprefix(paths))
commonprefix/one/two/threeprint('commonpath',os.path.commonpath(paths))
commonpath \one\two
构建文件路径的函数:
join将多个值拼接成一个文件路径,但是在值中不能包含/开头字符串,该函数会默认将前面的值给冲掉。
PATHS =[
('one', 'two', 'three'),
('/', 'one', 'two', 'three'),
('/one', '/two', '/three'),
]for path inPATHS:print(os.path.join(*path))
one/two/three/one/two/three/three
normalpath和abspath对输入的文件名进行格式化。
PATHS =['one//two//three','one/./two/./three','one/../alt/two/three',
]for path inPATHS:print('{!r:>22} : {!r}'.format(path, os.path.normpath(path)))for path inPATHS:print('{!r:>21} : {!r}'.format(path, os.path.abspath(path)))
os.path.getatime,os.path.getmtime,os.path.getctime,os.path.getsize提供对文件相关属性的访问