Est-il un moyen standard de Python pour titlecase une chaîne de caractères (par exemple les mots de commencer avec des caractères en majuscules, tout en restant enfermés les personnages ont en minuscules), mais en laissant les articles et comme mis en minuscule?
Réponses
Trop de publicités?Il y a un peu de problèmes avec cela. Si vous utilisez split et join, certains espaces blancs caractères seront ignorés. Le haut-capitaliser et le titre ne peut pas ignorer les espaces blancs.
>>> 'There is a way'.title()
'There Is A Way'
Si une phrase commence par un article, vous ne voulez pas le premier mot d'un titre en minuscules.
Gardant présentes à l'esprit:
import re
def title_except(s, exceptions):
word_list = re.split(' ', s) #re.split behaves as expected
final = [word_list[0].capitalize()]
for word in word_list[1:]:
final.append(word in exceptions and word or word.capitalize())
return " ".join(final)
articles = ['a', 'an', 'of', 'the', 'is']
print title_except('there is a way', articles)
#There is a Way
print title_except('a whim of an elephant', articles)
#A Whim of an Elephant
L'utilisation de la titlecase.py module! Ne fonctionne que pour l'anglais.
>>> from titlecase import titlecase
>>> titlecase('i am a foobar bazbar')
'I Am a Foobar Bazbar'
Il y a de ces méthodes:
>>> mytext = u'i am a foobar bazbar'
>>> print mytext.capitalize()
I am a foobar bazbar
>>> print mytext.title()
I Am A Foobar Bazbar
Il n'y a pas de minuscules article option. Vous avez le code que vous-même, probablement en utilisant une liste d'articles que vous voulez à la baisse.
Stuart Colville a fait un Python port d' un script Perl écrit par John Gruber pour convertir des chaînes en cas de titre, mais évite de capitaliser les petits mots en se basant sur les règles du New York Times Manuel de style, ainsi que la restauration de plusieurs cas particuliers.
Certains de l'intelligence de ces scripts:
ils capitalise petits mots, comme si, à, de, sur, etc., mais l'onu-capitalisées si elles sont à tort capitalisés dans l'entrée.
les scripts de supposer que des mots avec des lettres en majuscule autre que le premier caractère sont déjà correctement capitalisées. Cela signifie qu'ils vont laisser un mot comme "iTunes" seul, plutôt que d'amputation dans "ITunes" ou, pire, "Itunes".
ils ignorer tous les mots avec la ligne de points; "example.com" et "del.icio.nous" reste en minuscules.
ils ont codé en dur hacks spécifiquement pour traiter étrange cas, comme "AT&T" et "Q&A", qui contiennent tous des petits mots (et) qui, normalement, doivent être en minuscules.
Le premier et le dernier mot du titre sont toujours en majuscule, de sorte que l'entrée comme "Rien à craindre" sera transformé en "Rien à Craindre".
Un petit mot après un deux-points seront capitalisés.
Vous pouvez le télécharger ici.
capitalize (word)
Cela devrait le faire. - Je l'obtenir autrement.
>>> mytext = u'i am a foobar bazbar'
>>> mytext.capitalize()
u'I am a foobar bazbar'
>>>
Ok comme dit dans la réponse ci-dessus, vous devez faire une coutume de tirer profit:
mytext = u i suis un foobar bazbar'
def xcaptilize(word):
skipList = ['a', 'an', 'the', 'am']
if word not in skipList:
return word.capitalize()
return word
k = mytext.split(" ")
l = map(xcaptilize, k)
print " ".join(l)
Ce sorties
I am a Foobar Bazbar