我怎么把它分成两条线?

2024-09-19 03:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我不确定我应该寻找什么,但我向您保证,我已经做了我的研究,仍然为这个简单的问题提出了一个相当难看的20行长的代码块。

我正在处理一个基于金字塔框架的应用程序遍历URL。在

现在,URL可以是:(URL=None)

  1. url=“”
  2. url=“/”
  3. url=“/block_1”
  4. url=“/block_1/”
  5. url=“/block_1/block_2”
  6. url=“/block_1/block_2/”

url不能包含任何内容。在本例中,我希望函数返回False、None或空列表或元组。(不重要。)(匹配选项0或1)

块1:这是一个单字,a到Z字符串。不能也不应该包含任何特殊字符。实际上,作为块1,获取的内容应该在字典中(或列表中),如果找不到,则应引发并返回一个错误。如果块“1”不存在或找不到,则函数(如上所述)应返回False、None或empty list或tuple。(匹配选项2和3)

块2:块2可以是任何东西。为了简单起见,它可以包含任何语言的任何字符以及特殊字符,例如:()[]。如果我弄错了,请原谅,但我认为我想要的基本上是让它匹配[\pL\pN].*,但有一个例外:它的最后一个字符不能是斜杠:既不是"\"也不是{}。最好,我希望它是a to Z (including all languages' alphabets and their accented characters) along with some other characters from a list(我在上面特别定义了:()和[])。如果块2没有给定,它应该有值None,如果不匹配,它应该返回False。(匹配上面列出的最后两个选项)

我的代码以一个非常原始的代码开头,对此我深表歉意:

if not url: 
    return False
# then goes on evaluating the first charachter to see if it's a /
if fetch[0]  == '/':
    length = len(url)
    #then checks if there's a second / for the block_2
    slash_2 = fetch.find('/', 3) # or '/', 1
    if slash_2 == -1:
        block_1, block_2 = url[1:length].lower(), None
        # checks if block_1 is in a dictionary
        if not block_1 in the_dict:
            return False
    else: # if it's there it processes what's remaining
        block_1 = fetch[1:slash_2]
        block_2 = fetch[slash_2+1:]
        # then checks if there's another slash at the end of block_2
        if block_2[-1] == '/': # if so it removes it
            block_2 = block_2[:-1]
return False # otherwise returns false, which can be () or [] or None

如果我的代码很糟糕而且过于复杂,我很抱歉。我最喜欢的就是一个更优雅更好的方法。在

那我该怎么做呢?我该怎么做才能消除这些被卡住的代码行?在

谢谢。在


Tags: the代码nonefalseurlreturnif选项
2条回答

我首先要尝试的是^{} string function

>>> url = "/block_1/block_2"
>>> url.split("/")
['', 'block_1', 'block_2']

这将返回由/字符分隔的字符串组件列表。从那里,您可以使用len()函数来找出列表的长度,并根据您想要的逻辑采取适当的操作。在

必须使用split('/'),这将有助于解析URL。在

如果这还不够,应该使用urlparse来解析

urlparse.urlparse(path)
^{pr2}$

相关问题 更多 >