Как сделать заглавной первую букву каждого слова в строке (Python)? - PullRequest
495 голосов
/ 11 октября 2009
s = 'the brown fox'

... сделайте что-нибудь здесь ...

s должно быть:

'The Brown Fox'

Какой самый простой способ сделать это?

Ответы [ 15 ]

2 голосов
/ 29 января 2014

Чтобы заглавные слова ...

str = "this is string example....  wow!!!";
print "str.title() : ", str.title();

@ Gary02127 комментарий, ниже название работы решения с апострофом

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))
1 голос
/ 05 февраля 2018

Если только вы хотите первую букву: 'Привет, мир' .capitalize () Выход: Привет, мир

Но чтобы заглавные буквы каждое слово: 'Привет, мир'.title () Выход: Привет, мир

1 голос
/ 25 ноября 2017

Не забывайте о сохранении пустого пространства. Если вы хотите обработать 'fred flinstone' и вы получите 'Fred Flinstone' вместо 'Fred Flinstone', вы испортили свой пробел. Некоторые из вышеуказанных решений потеряют пустое пространство. Вот решение, которое подходит для Python 2 и 3 и сохраняет пробелы.

def propercase(s):
    return ''.join(map(''.capitalize, re.split(r'(\s+)', s)))
0 голосов
/ 14 марта 2018

** В случае, если вы хотите сократить **

 #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
0 голосов
/ 11 ноября 2013

Мне очень нравится этот ответ:

Готовая к копированию и вставке версия @jibberia anwser:

def capitalize(line):
    return ' '.join([s[0].upper() + s[1:] for s in line.split(' ')])

Но некоторые строки, которые я отправлял, отделяли некоторые пустые символы '', которые вызывали ошибки при попытке сделать s [1:]. Вероятно, есть лучший способ сделать это, но мне пришлось добавить в if len (s)> 0, как в

return ' '.join([s[0].upper() + s[1:] for s in line.split(' ') if len(s)>0])
...