我有一条路:
path = foo/bar/baz
Run Code Online (Sandbox Code Playgroud)
我想确定基础是什么.在这个例子中,它应该返回"foo".
我尝试过几种方法:
root = re.search('(.+?)/(.+)', path).group(1)
paths = path.split('/')[0]
root = paths[0] if paths[0] or len(paths) <= 1 else '/'.join(paths[0:2])
def rootname(path):
head,tail = os.path.split(path)
if head != '':
return rootname(head)
else:
return path
root = rootname(path)
Run Code Online (Sandbox Code Playgroud)
是否有更"Pythonic"的方式来访问根目录?
即
root = os.path.''rootname''(path)
Run Code Online (Sandbox Code Playgroud)
Pet*_*ter 14
>>> import os
>>> path = '/foo/bar/baz'
>>> path = path.lstrip(os.sep) # Get rid of leading "/" if any
>>> root = path[:path.index(os.sep)] if os.sep in path else path
>>> root
'foo'
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找能够完全满足您需求的内置函数或 stdlib 函数,那么没有。
\n\n如果您正在寻找第三方库,请尝试搜索 PyPI 和 ActiveState。您会发现路径操作库,例如pathlib(自 Python 3.4 起就包含在内)Unipath和forked-path(均基于早期库,其修改版本曾被考虑但从未被接受包含在 Python 2 中),以及其他数十个库。(或者,如果您使用的是类似twisted或PyQt,它可能会内置一个框架。)
使用这样的库,通常可以在一行中获取根路径,例如:
\n\npathlib.Path(mypath).parts[0]\nUnipath.Path(mypath).split_root()[0]\nUnipath.Path(mypath).components()[0]\npath.path(mypath).splitall()[0]\nRun Code Online (Sandbox Code Playgroud)\n\n他们对“root”的定义可能与您的不完全相同。(正如 JF Sebastian 指出的,我们实际上并不确切地知道你对“root”的定义是什么,所以很难猜测它是否会匹配 \xe2\x80\xa6)所以,你可能仍然需要这个代码类型:
\n\ncomponents = path.path(mypath).splitall()[0]\nreturn components[0] if len(components[0]) > 1 else components[0]/components[1]\nRun Code Online (Sandbox Code Playgroud)\n\n但无论如何,它都会比执行正则表达式和字符串操作更好。
\n\n(事实上,即使你不使用第三方库,你也应该尝试用os.path函数而不是字符串函数\xe2\x80\x94来构建所有内容,这样,当你明年在 Windows 上尝试时,就会有\这是一个很好的机会,它可以开箱即用,如果不是,它可能只需要进行微小的更改,而不是绝对保证它不会工作,并且可能需要完全重写。)
| 归档时间: |
|
| 查看次数: |
14314 次 |
| 最近记录: |