Python找到第n次出现的正斜杠
我在 JSON 文件中有一些 URL,我试图只提取图像名称(即 1234_5678.jpg)。这些 URL 如下所示:
"display_url": "https://scontent-ort2-1.cdninstagram.com/v/t51.2885-15/e35/42672335_535716956833725_410505336278760344_n.jpg?_nc.ort2-1.cdninstagram.com/v/t51.2885-15/e35/42672335_535716956833725_410505336278760344_n。 -T37mi&tp=1&oh=69744106833b4fa24cb921e6e1009d32&oe=6024044B&ig_cache_key=MTg5ODMzNjQ1NzMwMTM4Njg2Nw%3D%3D.2"
我决定使用的方法是定位第 6 次出现的正斜杠,以及.jpg, 并提取它们之间的子字符串:
import json
def findnth(haystack, needle, n):
parts= haystack.split(needle, n+1)
if len(parts)<=n+1:
return -1
return len(haystack)-len(parts[-1])-len(needle)
with open('pathtofile.json', encoding='utf8') as json_file:
data = json.load(json_file)
for p in data['GraphImages']:
url = p['display_url']
start = findnth(url, "/", 6)
end = url.find(".jpg")
print(start)
print(end)
url = url[start:end+3]
但是,起始值始终为 -1。最终值在 90-110 之间,这似乎是合理的。为什么我的第 n 个搜索功能没有找到合适的位置?
回答
您可以使用 urlparse
前任:
import os
from urllib.parse import urlparse
url = "https://scontent-ort2-1.cdninstagram.com/v/t51.2885-15/e35/42672335_535716956833725_410505336278760344_n.jpg?_nc_ht=scontent-ort2-1.cdninstagram.com&_nc_cat=109&_nc_ohc=PCKXombie-oAX-T37mi&tp=1&oh=69744106833b4fa24cb921e6e1009d32&oe=6024044B&ig_cache_key=MTg5ODMzNjQ1NzMwMTM4Njg2Nw%3D%3D.2"
o = urlparse(url)
print(os.path.basename(o.path))
# --> 42672335_535716956833725_410505336278760344_n.jpg