我有不完整的URL字符串,如下所示:
"dl_image/cm1111.jpg"
"dl_image/CM2222.jpg"
问题是,第二个是正确的,第一个是不正确的。数字和“ dl_image /”之间的字母必须始终为大写。
我正在使用以下代码通过urljoin将这些不完整的url连接到基本url上:
imagehtml = temp1['dl_image']
if temp1.get('set') != None:
if imagehtml != None and imagehtml !='':
soup = Soup(imagehtml, 'html.parser')
for a in soup.find_all('a', href=True):
print(urljoin(base_url, a['href']))
imagehtml包含不完整的网址。
有没有一种方法只能将这些字母转换为大写字母,而不能将扩展名或目录转换为大写字母?
答案 0 :(得分:2)
使用带有列表理解的str.join
作为参数,并进行条件处理和预期的处理:
>>> s="dl_image/cm1111.jpg"
>>> ''.join([v.upper() if s[i-1]=='/' or s[i-2]=='/' else v for i,v in enumerate(s)])
'dl_image/CM1111.jpg'
>>>
更新:
imagehtml = temp1['dl_image']
if temp1.get('set') != None:
if imagehtml != None and imagehtml !='':
soup = Soup(imagehtml, 'html.parser')
for a in soup.find_all('a', href=True):
print(urljoin(base_url, ''.join([v.upper() if a['href'][i-1]=='/' or a['href'][i-2]=='/' else v for i,v in enumerate(a['href'])])))
答案 1 :(得分:2)
也许你喜欢
url = 'dl_image/cm1111.jpg'
path, file = url.rsplit('/', 1)
name, ext = file.rsplit('.', 1)
print(path + '/' + name.upper() + '.' + ext)
即仅在最右边的“ /”和“。”处分割然后只将这两个位置之间的部分大写。
答案 2 :(得分:2)
我个人建议使用str.rfind()
,因为这种情况下的模式通常会在文件扩展名的最末尾包含一个.
,而在开始时会包含一个/
尝试将其转换为文件名字符串。请参见下面的代码:
s="dl_image/cm2222.jpg"
start = s.rfind('/')
end = s.rfind('.')
new_s = s[:start] + s[start:end].upper() + s[end:]
print (new_s)
#dl_image/CM2222.jpg
答案 3 :(得分:1)
是的,那很容易。这是一种实现方法:
/
的索引。这是将其转换为代码的一种方式:
test_url = "dl_image/cm1111.jpg"
last_slash_index = test_url.rfind('/')
extension_start_index = test_url.rfind('.')
final_url = test_url[:last_slash_index+1] + test_url[last_slash_index+1:extension_start_index].upper() + test_url[extension_start_index:]
答案 4 :(得分:0)
尝试这个:
import re
a = 'dl_image/cm12345/cm12.jpg'
b = len(a)-1-a[::-1].index('/')
c = a[b:]
d = re.findall(r"\d+",c)
if len(d)>0:
e = a.index(d[0], b)
f = a[:b+1]+a[b+1:e].upper()+a[e:]
print(f)
输出:
dl_image/cm12345/CM12.jpg