我一直在编写一个简单的方法来检查网址是否包含子目录,如果有,则将它们分成一个列表。我写的代码应该忽略URL的最后一个子目录(这是我在注意到循环在检查带有单个子目录的URL时迭代大约4次后意识到的错误。)
以下是代码:
import re
def check_web_address(web_address):
#set the pattern, then check if it matches
pattern = re.compile(r"[\w\-\.]*")
pat_check = pattern.match(web_address)
#if it does, separate the subdirs, assuming we checked for '/' earlier
if pat_check:
pattern_span = pat_check.span()
web_add_no_subdir = web_address[pattern_span[0]:pattern_span[1]]
raw_web_subs = web_address[pattern_span[1]:]
web_subs = []
"""Check if there is an additional slash,
then separate our subdir if the regex matches."""
slash = "/"
for slash in raw_web_subs[1:]:
pat_span = pattern.match(raw_web_subs[1:]).span()
real_end = pat_span[1]+1
web_subs.append(raw_web_subs[:real_end])
raw_web_subs = raw_web_subs[real_end:]
separated = [
web_add_no_subdir,
web_subs
]
return separated
else:
return None
这段代码实际上返回了一个子目录,因为我的unittest表示它成功运行了测试:
checked_add = wc.check_web_address("www.google.com/docs")
self.assertEqual(checked_add[0], 'www.google.com')
self.assertEqual(checked_add[1][0], '/docs')
所以,我在python控制台中测试了以下内容:
>>test = "/docs"
>>"/" in test[1:]
false
另外,如果我要求python打印
raw_web_subs[1:]
在循环开始之前,我得到字符串“docs”,没有正斜杠。
我在这里缺少什么?
答案 0 :(得分:1)
正如@ TadhgMcDonald-Jensen解释的那样,正在发生的事情是Python正在迭代每一个字符,@ Evert的建议使用'while'循环,这给出了我最初寻找的结果。
我可能最终会使用urllib.parse作为@Blckknght建议。
@TheLazyScripter提到可以做的是使用test = some_string_url.split('/')分隔字符串。这是一个比我想象的更优雅的解决方案。
谢谢大家。