在将项目附加到 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/')
尝试删除字符串右端的每个字符 v
、1
、/
- 它们可以按任何顺序排列。
'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'
我正在尝试将 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/')
尝试删除字符串右端的每个字符 v
、1
、/
- 它们可以按任何顺序排列。
'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'