>>> os.path.basename('http://example.com/file.txt')
'file.txt'
..我认为os.path.*
只适用于本地路径,而不是网址?请注意,上面的示例也在Windows上运行..结果相似。
答案 0 :(得分:19)
在实践中,os.path
的许多函数只是字符串操作函数(只是发生对于路径操作特别方便) - 并且因为这是无害的,偶尔也很方便,而正式说话“不正确”,我怀疑这会很快改变 - 更多细节,在shell /命令提示符下使用以下简单的单行程序:
$ 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:])"
答案 1 :(得分:3)
在Windows上,查看源代码:C:\ Python25 \ Lib \ ntpath.py
def basename(p):
"""Returns the final component of a pathname"""
return split(p)[1]
os.path.split(在同一个文件中)只是拆分“\”(和......其他)
答案 2 :(得分:2)
使用来源Luke:
def basename(p):
"""Returns the final component of a pathname"""
i = p.rfind('/') + 1
return p[i:]
编辑(回应澄清):
它偶然适用于URL,就是这样。因此,利用它的行为可以被一些人认为是代码味道。
尝试“修复”它(检查传递路径是否不是网址)也是非常困难的
www.google.com/test.php
me@other.place.com/12
./src/bin/doc/goto.c
同时正确的路径名和URL(相对),所以http:/hello.txt
(一个/,只在linux上,它有点愚蠢:))。您可以将其“修复”为绝对网址,但相对的仍可以使用。在python世界中以不同方式处理一个特殊情况是一个很大的禁忌。
总结一下:导入
答案 3 :(得分:2)
请注意带有参数,锚点或任何非“普通”URL的URL:
>>> 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'
答案 4 :(得分:1)
正斜杠也是Windows中可接受的路径分隔符。
仅仅是命令行不接受以/开头的路径,因为该字符是为args开关保留的。
答案 5 :(得分:0)
为什么呢?因为它对解析URL和本地文件路径很有用。为什么不呢?