如何仅使字符串的一部分大写?

时间:2018-12-17 05:18:23

标签: python python-3.x string

我有不完整的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包含不完整的网址。

有没有一种方法只能将这些字母转换为大写字母,而不能将扩展名或目录转换为大写字母?

5 个答案:

答案 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)

是的,那很容易。这是一种实现方法:

  1. 找到最后一个/的索引。
  2. 查找扩展名开始位置的索引。
  3. 将两个索引之间的所有内容都转换为大写。

这是将其转换为代码的一种方式:

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