在将项目附加到 json 时使用 "rstrip"

using "rstrip" while appending itens to a json

我正在尝试将 URL 附加到稍后将转换为 json 的列表中。

那些URL是同一个域,我知道只有版本暴露在这样​​的URL中才会改变,例如:

"https://www.example.com/v1/item/anotheritem/otheritem"

所以,我只需要 json 中 URL 的这一部分:“v1/item/anotheritem/otheritem”

我目前的代码是这样的:

participants=[]

for institution in data[0:1]:
    for auth in institution["auth"]:
        for api in auth["api"]:
            myList.append({
                'ID':[institution["ID"]],
                'Name':[institution["Name"]],
                'ParentInstitution':[institution["ParentInstitution"]],
                'ParentId':[institution["ParentId"]],
                'Roles':[A["Role"] for A in institution["InstitutionRoles"]],
                'BrandId':[auth["BrandId"]],
                'ApiFamily':[api["ApiFamily"]],
                'ApiEndpoints':[A["ApiEndpoint"] for A in api["ApiEndpoints"]]

我稍后会在 json 中转换此数据提取并用于其他目的。

现在,如果我的 URL 更小,那将非常有帮助,因此我需要将其剥离。

我相信我可以这样做:

'ApiEndpoints':[A["ApiEndpoint"].rstrip('/v1') for A in api["ApiEndpoints"]]

但这在 URLs 上没有实际结果。

我知道要让它工作,我必须使用这样的东西:

Stripped = ApiEndpoint.rstrip('/v1') (...)

但由于我是 python 的新手,所以我不太确定如何在我附加的列表中执行此操作。

你能帮我个忙吗?

如果所有 url 都有一个超出以 v1/ 开头的域的路径,一种方法是:

url = 'https://www.example.com/v1/item/anotheritem/otheritem'
part = url[url.index('v1/'):]

在您的代码中使用它:

for institution in data[0:1]:
    for auth in institution["auth"]:
        for api in auth["api"]:
            myList.append({
                'ID': [institution["ID"]],
                'Name': [institution["Name"]],
                'ParentInstitution': [institution["ParentInstitution"]],
                'ParentId': [institution["ParentId"]],
                'Roles': [A["Role"] for A in institution["InstitutionRoles"]],
                'BrandId': [auth["BrandId"]],
                'ApiFamily': [api["ApiFamily"]],
                'ApiEndpoints': [A["ApiEndpoint"][A["ApiEndpoint"].index('v1/'):] for A in api["ApiEndpoints"]]
            })

首先你可以使用 print() 看看你用 rstrip()

得到了什么

rstrip('v1/') 尝试删除字符串右端的每个字符 v1/ - 它们可以按任何顺序排列。

'something/v1/'.rstrip('v1/') 给出 'something'

'something/1111/vvvv/'.rstrip('v1/') 给出 'something'

但是

'something/v1/other'.rstrip('v1/') 给出相同的 'something/v1/other'


也许你的意思是 split 而不是 strip

'something/v1/other'.split('v1/') 给出列表 ['something/', 'other']

您可以使用 [-1] 获取最后一个元素并再次添加 'v1/'

'v1/' + 'something/v1/other'.split('v1/')[-1] 给出 'v1/other'

但也许与 / 和第二个参数一起使用会更有用 - 要拆分多少次

url = "https://www.example.com/v1/item/anotheritem/otheritem"

url.split('/')

给出列表

['https:', '', 'www.example.com', 'v1', 'item', 'anotheritem', 'otheritem']

url.split('/', 3) 给出

['https:', '', 'www.example.com', 'v1/item/anotheritem/otheritem']

并且你可以获得[-1]

url = "https://www.example.com/v1/item/anotheritem/otheritem"

url.split('/', 3)[-1]

给予

'v1/item/anotheritem/otheritem'

或者也许您应该为此使用 urllib.parser.urlsplit

url = "https://www.example.com/v1/item/anotheritem/otheritem"

import urllib.parse

urllib.parse.urlsplit(url)

给予

SplitResult(scheme='https', netloc='www.example.com', path='/v1/item/anotheritem/otheritem', query='', fragment='')

你可以获得.path

urllib.parse.urlsplit(url).path

给予

'/v1/item/anotheritem/otheritem'