os.path.basename为什么也能处理URL?
>>> os.path.basename('http://example.com/file.txt')
'file.txt'
.. 我原以为 os.path.*
只适用于本地路径,而不适用于网址?请注意,上面的例子在Windows上运行时也得到了类似的结果。
6 个回答
3
注意那些带有参数、锚点或者其他不是“普通”网址的链接:
>>> import os.path
>>> os.path.basename("protocol://fully.qualifie.host/path/to/file.txt")
'file.txt'
>>> os.path.basename("protocol://fully.qualifie.host/path/to/file.txt?param1¶m1#anchor")
'file.txt?param1¶m1#anchor'
3
在Windows系统上,可以查看源代码:C:\Python25\Lib\ntpath.py
def basename(p):
"""Returns the final component of a pathname"""
return split(p)[1]
os.path.split(在同一个文件里)只是把“\”符号(还有其他一些东西)分开。
19
实际上,很多os.path
里的函数其实就是处理字符串的函数(恰好特别适合用来处理路径)——虽然从严格意义上来说这样做是“错误”的,但因为这没什么坏处,有时候还挺方便的,所以我觉得这种情况短期内不会改变。如果想了解更多细节,可以在命令行里用下面这个简单的一行代码:
$ python -c"import sys; import StringIO; x = StringIO.StringIO(); sys.stdout = x; import this; sys.stdout = sys.__stdout__; print x.getvalue().splitlines()[10][9:]"
或者,如果你用的是Python 3的话:
$ python -c"import sys; import io; x = io.StringIO(); sys.stdout = x; import this; sys.stdout = sys.__stdout__; print(x.getvalue().splitlines()[10][9:])"