os.path.basename适用于URL,为什么?

时间:2009-07-11 00:16:17

标签: python url path

>>> os.path.basename('http://example.com/file.txt')
'file.txt'

..我认为os.path.*只适用于本地路径,而不是网址?请注意,上面的示例也在Windows上运行..结果相似。

6 个答案:

答案 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&param1#anchor")
'file.txt?param1&param1#anchor'

答案 4 :(得分:1)

正斜杠也是Windows中可接受的路径分隔符。

仅仅是命令行不接受以/开头的路径,因为该字符是为args开关保留的。

答案 5 :(得分:0)

为什么呢?因为它对解析URL和本地文件路径很有用。为什么不呢?