Python capitaliza solo la primera letra
Soy consciente de que .capitalize() pone en mayúscula la primera letra de una cadena, pero ¿qué pasa si el primer carácter es un número entero?
este
1bob
5sandy
a esto
1Bob
5Sandy
Sólo porque nadie más lo ha mencionado:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Sin embargo, esto también daría
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
es decir, no sólo pone en mayúscula el primer carácter alfabético. Pero luego .capitalize()
tiene el mismo problema, al menos en eso 'joe Bob'.capitalize() == 'Joe bob'
, así que meh.
Si el primer carácter es un número entero, no pondrá en mayúscula la primera letra.
>>> '2s'.capitalize()
'2s'
Si desea la funcionalidad, elimine los dígitos, puede usarlos '2'.isdigit()
para verificar cada carácter.
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
Esto es similar a la respuesta de @Anon en que mantiene intacto el resto del caso de la cadena, sin la necesidad del módulo re.
def sliceindex(x):
i = 0
for c in x:
if c.isalpha():
i = i + 1
return i
i = i + 1
def upperfirst(x):
i = sliceindex(x)
return x[:i].upper() + x[i:]
x = '0thisIsCamelCase'
y = upperfirst(x)
print(y)
# 0ThisIsCamelCase
Como señaló @Xan, la función podría necesitar más verificación de errores (como verificar que x es una secuencia; sin embargo, estoy omitiendo casos extremos para ilustrar la técnica)
Actualizado por comentario de @normanius (¡gracias!)
¡Gracias a @GeoStoneMarten por señalar que no respondí la pregunta! -arreglado eso