Frage

Gibt es eine Standardmethode in Python eine Zeichenfolge (das heißt Wörter mit Großbuchstaben beginnen, alle verbleibenden verrohrten Zeichen Klein haben) zu Titlecase aber Artikel wie and, in und of klein geschrieben verlassen?

War es hilfreich?

Lösung

Es gibt ein paar Probleme. Wenn Sie Split verwenden und kommen, werden einige Leerzeichen ignoriert werden. Der eingebaute in Kapital und Titel Methoden nicht Leerraum ignorieren.

>>> 'There     is a way'.title()
'There     Is A Way'

Wenn ein Satz beginnt mit einem Artikel, Sie möchten nicht das erste Wort eines Titels in Kleinbuchstaben.

Wenn man sich diese im Sinne:

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 if word in exceptions else 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

Andere Tipps

Mit dem titlecase.py Modul! Funktioniert nur für Englisch.

>>> from titlecase import titlecase
>>> titlecase('i am a foobar bazbar')
'I Am a Foobar Bazbar'

GitHub: https://github.com/ppannuto/python-titlecase

Es gibt diese Methoden:

>>> mytext = u'i am a foobar bazbar'
>>> print mytext.capitalize()
I am a foobar bazbar
>>> print mytext.title()
I Am A Foobar Bazbar

Es gibt keine Kleinen Artikel Option. Sie würden zu Code haben, dass sich, wahrscheinlich durch eine Liste von Artikeln verwenden Sie senken möchten.

Stuart Colville hat eine Python-Port gemacht von ein Perl-Skript von John Gruber geschrieben Strings in Titel Fall vermeidet aber konvertieren Kapitalisierung kleine Worte basierend auf Regeln aus der New York Times Manual of Style, sowie Catering für mehrere Sonderfälle.

Einige der Klugheit dieser Skripte:

  • sie kapitalisiert kleine Wörter wie , wenn in, der, auf , etc., aber Wille un-kapitalisieren sie, wenn sie in den Eingang fälschlicherweise aktiviert sind.

  • Die Skripte, die Wörter mit Großbuchstaben anders als das erste Zeichen übernehmen sind bereits korrekt aktiviert. Dies bedeutet, dass sie ein Wort wie „iTunes“ in Ruhe lassen, anstatt es in „ITunes“ Mangeln oder, schlimmer noch, „Itunes“.

  • sie alle Wörter mit Zeilen Punkten überspringen; „Example.com“ und „del.icio.us“ wird Klein bleiben.

  • Sie haben speziell hartcodierte Hacks mit ungeraden Fälle zu behandeln, wie „AT & T“ und „Q & A“, die beide die kleinen Wörter enthalten (bei und a) die normalerweise klein geschrieben werden sollte.

  • Das erste und letztes Wort des Titels ist immer aktiviert, so Eingang wie „Nichts zu fürchten“ wird in gedreht werden „Nichts zu befürchten“.

  • Ein kleines Wort nach einem Doppelpunkt aktiviert werden.

Sie können es herunterladen hier .

capitalize (word)

sollte dies tun. Ich bekomme es anders.

>>> mytext = u'i am a foobar bazbar'
>>> mytext.capitalize()
u'I am a foobar bazbar'
>>>

Ok sagte als Antwort oben, müssen Sie eine benutzerdefinierte machen profitieren:

mytext = U'i Uhr ein 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)   

Diese Ausgänge

I am a Foobar Bazbar

Python 2.7 Titel Methode hat einen Fehler in ihm.

value.title()

wird Carpenter zurückkehren ' S Assistent wenn der Wert Carpenter' s Assistent

Die beste Lösung ist wahrscheinlich derjenige von @BioGeek mit Titlecase von Stuart Colville. Das ist die gleiche Lösung von @Etienne vorgeschlagen.

 not_these = ['a','the', 'of']
thestring = 'the secret of a disappointed programmer'
print ' '.join(word
               if word in not_these
               else word.title()
               for word in thestring.capitalize().split(' '))
"""Output:
The Secret of a Disappointed Programmer
"""

Der Titel beginnt mit aktivierten Wort und den Artikel nicht überein.

Einzeiler mit Liste Verständnis und den ternären Operator

reslt = " ".join([word.title() if word not in "the a on in of an" else word for word in "Wow, a python one liner for titles".split(" ")])
print(reslt)

Aufteilung:

for word in "Wow, a python one liner for titles".split(" ") Splits die Zeichenfolge in eine Liste und leitet eine for-Schleife (in der Liste comprehenstion)

word.title() if word not in "the a on in of an" else word verwendet native Methode title() zum Titel Fall der Zeichenfolge, wenn es nicht ein Artikel ist

" ".join verbindet die Listenelemente mit einem seperator von (Leerzeichen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top