Python:添加尾部斜杠时的URL解析问题

时间:2014-12-24 18:09:37

标签: python url url-parsing

我正在python中开发一个小实验来规范化URL。我的主要目的是在URL的末尾添加斜杠/(如果它尚不存在)。例如,如果它是http://www.example.com,那么它应该转换为http://www.example.com/

以下是相同的小片段:

if url[len(url)-1] != "/":
        url = url + "/"

但这也会转换文件名。例如http://www.example.com/image.pnghttp://www.example.com/image.png/这是错误的。我只想在目录而不是文件名中添加斜杠。我该怎么做?

提前致谢!

2 个答案:

答案 0 :(得分:0)

你必须确保每当.进入URL时,对于目录,它应该在主机名中。如果它在其他任何地方,它是一个文件名。 所以为此,只需执行url.count('.')并检查是否大于主机名中的那些(例如,此处等于2)

if url.count('.') > 2:
    url = url if url[-1] != '/' else url[:-1]
else:
    url = url  if url[-1] == '/' else url + '/'

答案 1 :(得分:0)

您可以在最后一个子字符串上进行模式匹配,以检查已知域与文件扩展名。至少列举基本的top level domains类似.com,.gov,.org等并不太难。

如果您熟悉常规扩展程序,则可以匹配'.com$'等模式。

否则,您可以按'拆分。'并检查你得到的最后一个子字符串:

In [32]: url_png = 'http://www.example.com/image.png'

In [33]: url_com = 'http://www.example.com'

In [34]: domains = ['com', 'org', 'gov']

In [35]: for url in [url_png, url_com]:
   ....:     suffix = url.split('.')[-1]
   ....:     if suffix in domains:
   ....:         print url
   ....:
http://www.example.com

作为旁注,正如您在上面的示例中所看到的,您不需要url[len(url)-1]来索引列表的最后一个元素; Pythonic方式只是url[-1]