如何在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文字,而不是文字
所以我们需要一个unicode
string来处理这个转换,用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)