Python食谱-1.12.大小写控制

原文作者:Luther Blissett
中文编译:Tony (digitalsatori)

问题

如何才能将一个字符串由大写转为小写,或反之。

解决方法

字符串对象的 upperlower 方法就是为解决这类问题而设的。以上方法运行无需参数,返回一个字符串副本,其中的所有字母都转换为大写(upper),或小写(lower)

big = little.upper()
little = big.lower()

不是字母的字符则原样拷贝。

s.capitalize 与使用 s[:1].upper()+s[1:].lower() 的效果一样:就是首字母为大写,其他字母小写。 s.title 与上类似,不过会使每个单词的首字母大写, 其余字母小写:

>>> print 'one tWo thrEe'.capitalize()
One two three
>>> print 'one tWo thrEe'.title()
One Two Three

讨论

我们经常会用到字符串的大小写处理,所以字符串对象中设置了一些用于改变字符串字母大小写的方法。另外还设有一些判断大小写类型的方法,比如: isupper , islower , istitle 。 当字符串至少包括一个字母,不为空,并且分别符合“全部大写”,“全部小写”,“单词首字母大写”的情况则返回'True'。要注意以上的 is...方法对空字符串,或字符串中不包含字母的情况返回'False'。

因为字符串对象中没有包含'iscapitalized'的方法,我们可以简单地按如下方法构造:

def iscapitalized(s):
  return s == s.capitalize()

但是以上的代码与其他is...方法的语意范围并不一致。因为其对于空字符串或字符串中没有字母的情况返回'True’,以下是比较严格的构造方法:

import string
notrans = string.maketrans('', '')  # identity "translation"
def containsAny(str, strset):
    return len(strset) != len(strset.translate(notrans, str))
def iscapitalized(s):
    return s == s.capitalize( ) and containsAny(s, string.letters)

在以上代码中我们用到了在 Python食谱1.8 中所介绍的方法以确保在字符串为空或不包含字母时返回'False'。正如 Python食谱1.8 中所提到的,以上的代码只能对普通字符串有效,而无法处理Unicode字符串。

Leave a Response