separar - ¿Cómo poner en mayúscula la primera letra de cada palabra en una cadena(Python)?
python separar string por caracter (15)
¿Por qué complicas tu vida con uniones y bucles cuando la solución es simple y segura?
Solo haz esto:
string = "the brown fox"
string[0].upper()+string[1:]
s = ''the brown fox''
... hacer algo aquí ...
s
debe ser:
''The Brown Fox''
¿Cuál es la forma más fácil de hacer esto?
** En caso de que desee reducir el tamaño **
#Assuming you are opening a new file
with open(input_file) as file:
lines = [x for x in reader(file) if x]
#for loop to parse the file by line
for line in lines:
name = [x.strip().lower() for x in line if x]
print(name) #check the result
Como Mark señaló, debes usar .title()
:
"MyAwesomeString".title()
Sin embargo, si desea hacer la primera letra en mayúscula dentro de una plantilla de django , puede usar esto:
{{ "MyAwesomeString"|title }}
o utilizando una variable:
{{ myvar|title }}
El método .title()
de una cadena (ya sea ASCII o Unicode está bien) hace esto:
>>> "hello world".title()
''Hello World''
>>> u"hello world".title()
u''Hello World''
Sin embargo, busque cadenas con apóstrofes incrustados, como se indica en los documentos.
El algoritmo utiliza una definición simple e independiente del lenguaje de una palabra como grupos de letras consecutivas. La definición funciona en muchos contextos, pero significa que los apóstrofes en las contracciones y posesivos forman límites de palabras, que pueden no ser el resultado deseado:
>>> "they''re bill''s friends from the UK".title() "They''Re Bill''S Friends From The Uk"
El método .title()
no puede funcionar bien,
>>> "they''re bill''s friends from the UK".title()
"They''Re Bill''S Friends From The Uk"
Pruebe el método string.capwords()
,
import string
string.capwords("they''re bill''s friends from the UK")
>>>"They''re Bill''s Friends From The Uk"
De los string.capwords() :
Divida el argumento en palabras usando str.split (), use mayúsculas en cada palabra usando str.capitalize (), y junte las palabras en mayúsculas usando str.join (). Si el segundo argumento opcional sep está ausente o Ninguno, las corridas de caracteres de espacio en blanco se reemplazan por un solo espacio y los espacios en blanco iniciales y finales se eliminan; de lo contrario, sep se utiliza para dividir y unir las palabras.
El método sugerido str.title () no funciona en todos los casos. Por ejemplo:
string = "a b 3c"
string.title()
> "A B 3C"
en lugar de "AB 3c"
.
Creo que es mejor hacer algo como esto:
def capitalize_words(string):
words = string.split()
return '' ''.join([word.capitalize() for word in words])
capitalize_words(string)
>''A B 3c''
No pase por alto la preservación del espacio en blanco. Si desea procesar ''fred flinstone''
y obtiene ''Fred Flinstone''
lugar de ''Fred Flinstone''
, ha corrompido su espacio en blanco. Algunas de las soluciones anteriores perderán espacio en blanco. Aquí hay una solución que es buena para Python 2 y 3 y preserva el espacio en blanco.
def propercase(s):
return ''''.join(map(''''.capitalize, re.split(r''(/s+)'', s)))
Para capitalizar palabras ...
str = "this is string example.... wow!!!";
print "str.title() : ", str.title();
@ Comentario de Gary02127, debajo del título de trabajo de solución con apóstrofe
import re
def titlecase(s):
return re.sub(r"[A-Za-z]+(''[A-Za-z]+)?", lambda mo: mo.group(0)[0].upper() + mo.group(0)[1:].lower(), s)
text = "He''s an engineer, isn''t he? SnippetBucket.com "
print(titlecase(text))
Realmente me gusta esta respuesta:
Versión lista para copiar y pegar de @jibberia anwser:
def capitalize(line):
return '' ''.join([s[0].upper() + s[1:] for s in line.split('' '')])
Pero algunas de las líneas que estaba enviando dividieron algunos caracteres en blanco que causaron errores al intentar hacer s [1:]. Probablemente haya una mejor manera de hacer esto, pero tuve que agregar un if si len (s)> 0, como en
return '' ''.join([s[0].upper() + s[1:] for s in line.split('' '') if len(s)>0])
Si solo quieres la primera letra: ''hola mundo''. Capitalizar () Salida: Hola mundo
Pero para poner en mayúscula cada palabra: ''hola mundo''. Título () Salida: hola mundo
Si str.title () no funciona para usted, haga las mayúsculas.
- Dividir la cadena en una lista de palabras
- Poner en mayúscula la primera letra de cada palabra
- Unir las palabras en una sola cadena
Un trazador de líneas:
>>> '' ''.join([s[0].upper() + s[1:] for s in "they''re bill''s friends from the UK".split('' '')])
"They''re Bill''s Friends From The UK"
Claro ejemplo:
input = "they''re bill''s friends from the UK"
words = input.split('' '')
capitalized_words = []
for word in words:
title_case_word = word[0].upper() + word[1:]
capitalized_words.append(title_case_word)
output = '' ''.join(capitalized_words)
Solo porque este tipo de cosas son divertidas para mí, aquí hay dos soluciones más.
Dividir en palabras, inicializar cada palabra de los grupos divididos y volver a unir. Esto cambiará el espacio en blanco que separa las palabras en un solo espacio en blanco, sin importar lo que sea.
s = ''the brown fox''
lst = [word[0].upper() + word[1:] for word in s.split()]
s = " ".join(lst)
EDITAR: No recuerdo lo que estaba pensando cuando escribí el código anterior, pero no hay necesidad de construir una lista explícita; Podemos usar una expresión generadora para hacerlo de manera perezosa. Así que aquí hay una mejor solución:
s = ''the brown fox''
s = '' ''.join(word[0].upper() + word[1:] for word in s.split())
Use una expresión regular para hacer coincidir el comienzo de la cadena o las palabras que separan los espacios en blanco, más un solo carácter que no sea un espacio en blanco; Usa paréntesis para marcar "grupos de coincidencias". Escriba una función que tome un objeto de coincidencia y devuelva el grupo de coincidencia de espacios en blanco sin cambios y el grupo de coincidencia de caracteres que no son espacios en blanco en mayúsculas. Luego use re.sub()
para reemplazar los patrones. Este no tiene los problemas de puntuación de la primera solución, ni tampoco rehace el espacio en blanco como mi primera solución. Éste produce el mejor resultado.
import re
s = ''the brown fox''
def repl_func(m):
"""process regular expression match groups for word upper-casing problem"""
return m.group(1) + m.group(2).upper()
s = re.sub("(^|/s)(/S)", repl_func, s)
>>> re.sub("(^|/s)(/S)", repl_func, s)
"They''re Bill''s Friends From The UK"
Me alegro de haber investigado esta respuesta. ¡No tenía idea de que re.sub()
podría tomar una función! Puede hacer un procesamiento no trivial dentro de re.sub()
para producir el resultado final.
Una cadena vacía generará un error si accede a [1:], por lo tanto, usaría:
def my_uppercase(title):
if not title:
return ''''
return title[0].upper() + title[1:]
para escribir en mayúscula solo la primera letra.
Versión lista para copiar y pegar de @jibberia anwser:
def capitalize(line):
return '' ''.join(s[:1].upper() + s[1:] for s in line.split('' ''))
Aquí hay un resumen de diferentes maneras de hacerlo:
La solución más simple es dividir la oración en palabras y poner mayúscula en la primera letra y luego unirla nuevamente.
# Be careful with multiple spaces, and empty strings
# for empty words w[0] would cause an index error,
# but with w[:1] we get an empty string as desired
def cap_sentence(s):
return '' ''.join(w[:1].upper() + w[1:] for w in s.split('' ''))
Si no desea dividir primero la cadena de entrada en palabras y usar generadores de fantasía:
# Iterate through each of the characters in the string and capitalize
# the first char and any char after a blank space
from itertools import chain
def cap_sentence(s):
return ''''.join( (c.upper() if prev == '' '' else c) for c, prev in zip(s, chain('' '', s)) )
o sin importar itertools
def cap_sentence(s):
return ''''.join( (c.upper() if i == 0 or s[i-1] == '' '' else c) for i, c in enumerate(s) )
o puedes usar expresiones regulares, de la respuesta de steveha
# match the beginning of the string or a space, followed by a non-space
import re
def cap_sentence(s):
return re.sub("(^|/s)(/S)", lambda m: m.group(1) + m.group(2).upper(), s)
Estos funcionarán para todas estas entradas:
"" => ""
"a b c" => "A B C"
"foO baR" => "FoO BaR"
"foo bar" => "Foo Bar"
"foo''s bar" => "Foo''s Bar"
"foo''s1bar" => "Foo''s1bar"
"foo 1bar" => "Foo 1bar"
Ahora, estas son algunas otras respuestas que se publicaron, y entradas para las cuales no funcionan como se esperaba si estamos usando la definición de una palabra que es el comienzo de la oración o algo después de un espacio en blanco:
return s.title()
# Undesired outputs:
"foO baR" => "Foo Bar"
"foo''s bar" => "Foo''S Bar"
"foo''s1bar" => "Foo''S1Bar"
"foo 1bar" => "Foo 1Bar"
return '' ''.join(w.capitalize() for w in s.split())
# or
import string
return string.capwords(s)
# Undesired outputs:
"foO baR" => "Foo Bar"
"foo bar" => "Foo Bar"
el uso de '''' para la división arreglará la segunda salida, pero capwords () aún no funcionará para la primera
return '' ''.join(w.capitalize() for w in s.split('' ''))
# or
import string
return string.capwords(s, '' '')
# Undesired outputs:
"foO baR" => "Foo Bar"
Tenga cuidado con múltiples espacios en blanco
return '' ''.join(w[0].upper() + w[1:] for w in s.split())
# Undesired outputs:
"foo bar" => "Foo Bar"