2013-07-07 4 views
2

J'utilise le code suivant pour changer la première lettre de chaque mot à un capital, sauf pour certaines insignifiantes (a, de etc.)Garder les lettres majuscules existantes dans la chaîne

f = open('/Users/student/Desktop/Harry.txt').readlines()[2] 
new_string = f.title() 
print (new_string) 

Ce que je voudrais aussi faire est d'avoir ces mots d'exception non capitalisés comme indiqué ci-dessus mais aussi que tout mot qui a déjà des lettres majuscules (par exemple CHINE, NSW) que ces lettres seront conservées.

+0

Même si votre question est assez claire, le code que vous manifestez est pas utile. La première ligne n'est pas du tout liée à la question. Ce qui serait bien, c'est un exemple de chaîne, le 'new_string' désiré, et le' new_string' actuel. –

+0

donc vous voulez vérifier si votre chaîne est déjà tout en majuscules ...? – second

+0

Qu'en est-il des mots comme «aBCDe»? –

Répondre

1

Quelque chose comme ceci:

En utilisant str.capitalize:

Pourquoi?

>>> "CAN'T".title() 
"Can'T" 

>>> "CAN'T".capitalize() 
"Can't" 

code:

>>> strs = """What i would also like to do is have those exception words not capitalised as 
stated above but also have that any word that already has capitals letters 
(For e.g. CHINA, NSW etc.) that those letters will be retained.""" 
>>> words = {'a','of','etc.','e.g.'} #set of words that shouldn't be changed 
>>> lis = [] 
for word in strs.split(): 
    if word not in words and not word.isupper(): 
     lis.append(word.capitalize()) 
    else:  
     lis.append(word) 
...   
>>> print " ".join(lis) 
What I Would Also Like To Do Is Have Those Exception Words Not Capitalised As Stated Above But Also Have That Any Word That Already Has Capitals Letters (For e.g. CHINA, NSW etc.) That Those Letters Will Be Retained. 
0

Pour la première exigence, vous pouvez créer une liste contenant les mots d'exception:

e_list = ['a', 'of', 'the'] # for example 

Ensuite, vous pouvez exécuter quelque chose comme ça, en utilisant isupper() pour vérifier si la chaîne est déjà tout en majuscules:

new = lambda x: ' '.join([a.title() if (not a in e_list and not a.isupper()) else a for a in x.split()]) 

Test:

f = 'Testing if one of this will work EVERYWHERE, also in CHINA, in the run.' 

print new(f) 
#Testing If One of This Will Work EVERYWHERE, Also In CHINA, In the Run. 
+0

Cela supprimera les mots qui n'ont pas besoin d'être en majuscules, au lieu de les conserver tels quels. – interjay

+0

@interjay Merci pour les commentaires, il manquait une autre déclaration dans la liste de compréhension ... –

Questions connexes