我正在python中开发一个小实验来规范化URL。我的主要目的是在URL的末尾添加斜杠/
(如果它尚不存在)。例如,如果它是http://www.example.com
,那么它应该转换为http://www.example.com/
以下是相同的小片段:
if url[len(url)-1] != "/":
url = url + "/"
但这也会转换文件名。例如http://www.example.com/image.png
到http://www.example.com/image.png/
这是错误的。我只想在目录而不是文件名中添加斜杠。我该怎么做?
提前致谢!
答案 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]
。