2013-07-07 2 views
2

Я использую следующий код, чтобы изменить первую букву каждого слова в капитал для некоторых тривиальных, за исключением (а, в и т.д.)Сохранение существующих заглавных букв в строке

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

Что я хотел бы делать эти слова исключений, не капитализированные, как указано выше, но также иметь любое слово, которое уже имеет буквы капиталов (например, КИТАЙ, NSW), что эти буквы будут сохранены.

+0

Даже если ваш вопрос достаточно ясно, код, который вы показываете не полезно. Первая строка не связана с вопросом вообще. Что было бы неплохо, это строка примера, желаемая 'new_string' и текущая' new_string'. –

+0

, так что вы хотите проверить, была ли ваша строка уже прописной ...? – second

+0

Как насчет таких слов, как 'aBCDe''? –

ответ

1

Что-то вроде этого:

Использование str.capitalize:

Почему?

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

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

Код:

>>> 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

Для первого требования вы можете создать список, содержащий исключения слова:

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

Затем вы можете запустить что-то вроде этого, используя isupper(), чтобы проверить, если строка уже все капитализированные:

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

Тестирование:

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

Это приведет к удалению слов, которые не нужно заглаживать, вместо того, чтобы хранить их как есть. – interjay

+0

@interjay Благодарим вас за отзыв, у него отсутствовало заявление else в понимании списка ... –

Смежные вопросы