python标准库解析_Python标准库——文件系统

解析路径

os . path 中的第一组函数可以用来将表示文件名的字符串解析为文件名的各个组成部分。这些函数并不要求路径真正存在:它们只是处理字符串。

路径解析依赖于os中定义的一些变量:

os.sep:路径各部分之间的分隔符(例如,“/”或“\”)。

os .extsep:文件名与文件“扩展名”之间的分隔符(例如“.”)。

os.pardir:路径中表示目录树上一级的部分(例如“..”)。

os.curdir:路径中指示当前目录的部分(例如“.”)。

split()函数将路径分解为两个单独的部分,并返回包含这些结果的一个tuple。这个tuple的第二个元素是路径的最后一部分,第一个元素则是此前的所有内容。

新建ospath_split.py文件。

import os.path

PATHS = [

'/one/two/three',

'/one/two/three/',

'/',

'.',

'',

]

for path in PATHS:

print('{!r:>17} : {}'.format(path, os.path.split(path)))

以上代码输出结果为:

'/one/two/three' : ('/one/two', 'three')

'/one/two/three/' : ('/one/two/three', '')

'/' : ('/', '')

'.' : ('', '.')

'' : ('', '')

以上代码,输入参数以os.path结尾时,路径的最后一个元素是一个空串。

basename()函数返回的值等价于split()值的第二部分。

新建ospath_basename.py文件。

import os.path

PATHS = [

'/one/two/three',

'/one/two/three/',

'/',

'.',

'',

]

for path in PATHS:

print('{!r:>17} : {!r}'.format(path, os.path.basename(path)))

以上代码输出结果为:

'/one/two/three' : 'three'

'/one/two/three/' : ''

'/' : ''

'.' : '.'

'' : ''

以上代码,整个路径会剥除到只剩下一个元素,不论这指示的是一个文件还是一个目录。如果路径以目录分隔符结尾,则认为基本部分为空。

dirname()函数返回分解路径得到的第一部分。

新建ospath_dirname.py文件。

import os.path

PATHS = [

'/one/two/three',

'/one/two/three/',

'/',

'.',

'',

]

for path in PATHS:

print('{!r:>17} : {!r}'.format(path, os.path.dirname(path)))

以上代码输出结果为:

'/one/two/three' : '/one/two'

'/one/two/three/' : '/one/two/three'

'/' : '/'

'.' : ''

'' : ''

以上代码,将basename()的结尾与dirname()结合可以得到原来的路径。

splitext()的工作类似于split(),不过它会根据扩展名分隔符而不是目录分隔符来分解路径。

新建ospath_splitext.py文件。

import os.path

PATHS = [

'filename.txt',

'filename',

'/path/to/filename.txt',

'/',

'',

'my-archive.tar.gz',

'no-extension.',

]

for path in PATHS:

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', '.')

以上代码,查找扩展名时,只使用os.extsep的最后一次出现,所有如果一个文件有多个扩展名,那么分解这个文件名时,部分扩展名会在前缀上。

commonprefix()取一个路径列表作为参数,并且返回一个字符串,表示所有路径中都出现的公共前缀。这个值可能表示一个根本不存在的路径,而且并不考虑路径分隔符,所以这个前缀可能并不落在一个分隔符边界上。

新建ospath_commonprefix.py文件。

import os.path

paths = ['/one/two/three/four',

'/one/two/threefold',

'/one/two/three/',

]

for path in paths:

print('PATH:', path)

print()

print('PREFIX:', os.path.commonprefix(paths))

以上代码输出结果为:

PATH: /one/two/three/four

PATH: /one/two/threefold

PATH: /one/two/three/

PREFIX: /one/two/three

以上代码,公共前缀字符串是/one/two/three,尽管其中一个路径并不包括一个名为three的目录。

commonpath()则要考虑路径分隔符。它返回的前缀不包括部分路径值。

新建ospath_commonpath.py文件。

import os.path

paths = ['/one/two/three/four',

'/one/two/threefold',

'/one/two/three/',

]

for path in paths:

print('PATH:', path)

print()

print('PREFIX:', os.path.commonpath(paths))

以上代码输出结果为:

PATH: /one/two/three/four

PATH: /one/two/threefold

PATH: /one/two/three/

PREFIX: \one\two

以上代码,由于“threefold”在“three”后面没有一个路径分隔符,所以公共前缀为/one/two。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值