如何在Python中将string转换为小写

有没有办法将string从大写,甚至部分大写转换为小写?

例如公里 – >公里。

s = "Kilometer" print(s.lower()) 

官方文档是str.lower()

这对于UTF-8中的非英文单词不起作用。 在这种情况下, decode('utf-8')可以帮助:

 >>> s='Километр' >>> print s.lower() Километр >>> print s.decode('utf-8').lower() километр 

你可以做彼得说的话 ,或者如果你想让用户input你能做到的事情:

 raw_input('Type Something').lower() 

然后它会自动将它们input的内容转换为小写。

注意:在Python 3.x及更高版本中, raw_input被重命名为input

如何在Python中将string转换为小写?

有没有办法将整个用户input的string从大写,甚至是大写部分转换为小写?

例如公里 – >公里

规范Pythonic这样做的方式是

 >>> 'Kilometers'.lower() 'kilometers' 

但是,如果目的是做不区分大小写的匹配,你应该使用case-folding:

 >>> "MASSE" == "Maße" False >>> "MASSE".lower() == "Maße".lower() False >>> "MASSE".casefold() == "Maße".casefold() True 

这是Python 3中的一个str方法,但在Python 2中,您将需要查看PyICU或py2casefold – 这里有几个解答 。

Unicode Python 3

Python 3将 Unicode作为常规string处理:

 >>> string = 'Километр' >>> string 'Километр' >>> string.lower() 'километр' 

Unicode Python 2

但是Python 2并没有将下面的代码粘贴到shell中,而是使用utf-8将string编码为一串字节。

lower不映射任何原生的Unicode对象会知道的变化,所以我们得到相同的string。

 >>> string = 'Километр' >>> string '\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80' >>> string.lower() '\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80' >>> print string.lower() Километр 

在脚本中,Python将反对非ascii(从Python2.5开始,在Python2.4中警告)字节在一个没有给定编码的string中,因为预期的编码是不明确的。 有关更多信息,请参阅文档和PEP 263中的Unicode指导

使用Unicode文字,而不是文字

所以我们需要一个unicodestring来处理这个转换,用unicode文字很容易实现:

 >>> unicode_literal = u'Километр' >>> print unicode_literal.lower() километр 

请注意,这些字节与str字节完全不同 – 转义字符是'\u'后跟2个字节的宽度,或者这些unicode字母的16位表示forms:

 >>> unicode_literal u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440' >>> unicode_literal.lower() u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440' 

现在,如果我们只有一个str的forms,我们需要把它转换为unicode 。 Python的Unicodetypes是一种通用编码格式,与其他大多数编码相比 ,它具有许多优点 。 我们可以使用unicode构造函数或str.decode方法与编解码器将str转换为unicode

 >>> unicode_from_string = unicode(string, 'utf-8') # "encoding" unicode from string >>> print unicode_from_string.lower() километр >>> string_to_unicode = string.decode('utf-8') >>> print string_to_unicode.lower() километр >>> unicode_from_string == string_to_unicode == unicode_literal True 

这两种方法都转换为unicodetypes – 和unicode_literal一样。

最佳实践,使用Unicode

build议您始终使用Unicode中的文本 。

软件只能在内部使用Unicodestring,在输出中转换为特定的编码。

必要时可以编码回来

但是,要在str返回小写字母,请将pythonstring重新编码为utf-8

 >>> print string Километр >>> string '\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80' >>> string.decode('utf-8') u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440' >>> string.decode('utf-8').lower() u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440' >>> string.decode('utf-8').lower().encode('utf-8') '\xd0\xba\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80' >>> print string.decode('utf-8').lower().encode('utf-8') километр 

所以在Python 2中,Unicode可以编码为Pythonstring,Pythonstring可以解码为Unicodetypes。

另外,你可以覆盖一些variables:

 s = input('UPPER CASE') lower = s.lower() 

如果你这样使用:

 s = "Kilometer" print(s.lower()) - kilometer print(s) - Kilometer 

它会在被调用时工作。

如果整个文本像“KILOMETER”那样是大写的,而你只希望第一个字符被小写,那么做

 text = "KILOMETER" result = text[:1] + text[1:].lower() print(result) 

但要小写整个string,请执行

 text = "KILOMETER" text = text.lower() print(text)