Gibt es in Python) eine Standardmethode, um einen String mit einem Titel zu versehen (dh Wörter beginnen mit Großbuchstaben, alle verbleibenden Großbuchstaben haben Kleinbuchstaben), wobei jedoch Artikel wie and
, in
und of
in Kleinbuchstaben?
Es gibt ein paar Probleme damit. Wenn Sie split and join verwenden, werden einige Leerzeichen ignoriert. Bei den integrierten Methoden capitalize und title werden Leerzeichen nicht ignoriert.
>>> 'There is a way'.title()
'There Is A Way'
Wenn ein Satz mit einem Artikel beginnt, soll das erste Wort eines Titels nicht in Kleinbuchstaben geschrieben werden.
Beachten Sie dabei Folgendes:
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
Verwenden Sie das titlecase.py Modul! Funktioniert nur für Englisch.
>>> from titlecase import titlecase
>>> titlecase('i am a foobar bazbar')
'I Am a Foobar Bazbar'
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 Option für Artikel in Kleinbuchstaben. Sie müssten das selbst codieren, wahrscheinlich mithilfe einer Liste von Artikeln, die Sie senken möchten.
Stuart Colville hat einen Python port aus einem von John Gruber geschriebenen Perl-Skript gemacht, um Zeichenfolgen in Groß- und Kleinschreibung umzuwandeln, vermeidet jedoch die Groß- und Kleinschreibung von Wörtern auf Regeln aus dem New York Times Manual des Stils, sowie Verpflegung für mehrere Sonderfälle.
Einige der Klugheit dieser Skripte:
sie schreiben kleine Wörter wie , wenn, in, von, auf , usw. in Großbuchstaben, deaktivieren sie jedoch, wenn sie bei der Eingabe fälschlicherweise in Großbuchstaben geschrieben werden.
in den Skripten wird davon ausgegangen, dass Wörter mit anderen Großbuchstaben als dem ersten Zeichen bereits korrekt groß geschrieben sind. Dies bedeutet, dass sie ein Wort wie "iTunes" in Ruhe lassen, anstatt es in "iTunes" oder, schlimmer noch, "iTunes" zu zerlegen.
sie überspringen Wörter mit Strichpunkten; "Example.com" und "del.icio.us" bleiben in Kleinbuchstaben.
sie haben hartcodierte Hacks speziell für Sonderfälle wie „AT & T“ und „Q & A“. Beide enthalten kleine Wörter (at und a), die normalerweise in Kleinbuchstaben geschrieben werden sollten.
Das erste und das letzte Wort des Titels werden immer in Großbuchstaben geschrieben, sodass Eingaben wie "Nichts, vor dem man Angst haben muss" in "Nichts, vor dem man Angst haben muss" umgewandelt werden.
Ein kleines Wort nach einem Doppelpunkt wird großgeschrieben.
Sie können es herunterladen hier .
capitalize (Word)
Das sollte reichen. Ich verstehe es anders.
>>> mytext = u'i am a foobar bazbar'
>>> mytext.capitalize()
u'I am a foobar bazbar'
>>>
Ok, wie oben in der Antwort erwähnt, müssen Sie eine benutzerdefinierte Großschreibung vornehmen:
mytext = Ich bin ein Trottel
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)
Dies gibt aus
I am a Foobar Bazbar
Die Titelmethode von Python 2.7 weist einen Fehler auf.
value.title()
gibt Carpenter ' [~ # ~] s [~ # ~] Assistent zurück, wenn der Wert Carpenter' s Assistent
Die beste Lösung ist wahrscheinlich die von @BioGeek mit dem titlecase von Stuart Colville. Welches 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 Großbuchstaben und stimmt nicht mit dem Artikel überein.
Einzeilig mit Listenverständnis und dem 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)
Aufschlüsselung:
for Word in "Wow, a python one liner for titles".split(" ")
Teilt den String in eine Liste und initiiert eine for-Schleife (im Listenverständnis)
Word.title() if Word not in "the a on in of an" else Word
verwendet die native Methode title()
, um die Zeichenfolge in Groß- und Kleinschreibung zu bezeichnen, wenn es sich nicht um einen Artikel handelt
" ".join
Verbindet die Listenelemente mit einem Trennzeichen von (Leerzeichen)