How do I lowercase a string in Python?
有没有一种方法可以将字符串从大写,甚至部分大写转换为小写?
例如,"公里"→"公里"。
使用
1 2 | s ="Kilometer" print(s.lower()) |
官方的2.x文件在这里:
对于python 2,这不适用于UTF-8中的非英语单词。在这种情况下,
1 2 3 4 5 | >>> s='Километр' >>> print s.lower() Километр >>> print s.decode('utf-8').lower() километр |
How to convert string to lowercase in Python?
Is there any way to convert an entire user inputted string from uppercase, or even part uppercase to lowercase?
E.g. Kilometers --> kilometers
做这件事的典型方法是
1 2 | >>> 'Kilometers'.lower() 'kilometers' |
但是,如果目的是进行不区分大小写的匹配,则应使用大小写折叠:
1 2 | >>> 'Kilometers'.casefold() 'kilometers' |
这就是为什么:
1 2 3 4 5 6 7 8 9 10 | >>>"Ma?e".casefold() 'masse' >>>"Ma?e".lower() 'ma?e' >>>"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 3python 3以unicode格式处理纯字符串文本:
1 2 3 4 5 | >>> string = 'Километр' >>> string 'Километр' >>> string.lower() 'километр' |
python 2,纯字符串文本是字节
在python 2中,下面的代码粘贴到shell中,使用
而且
1 2 3 4 5 6 7 | >>> 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(从python 2.5开始,并在python 2.4中发出警告)字节位于没有给定编码的字符串中,因为预期的编码是不明确的。有关更多信息,请参阅docs和pep 263中的Unicode操作方法
使用unicode文本,而不是因此,我们需要一个
1 2 3 | >>> unicode_literal = u'Километр' >>> print(unicode_literal.lower()) километр |
注意,字节与
1 2 3 4 | >>> unicode_literal u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440' >>> unicode_literal.lower() u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440' |
现在,如果我们只有一个
1 2 3 4 5 6 7 8 | >>> 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 |
这两种方法都转换为Unicode类型-和Unicode字体相同。
最佳实践,使用Unicode建议您始终使用Unicode格式的文本。
Software should only work with Unicode strings internally, converting to a particular encoding on output.
必要时可以重新编码
但是,要使
1 2 3 4 5 6 7 8 9 10 11 12 | >>> 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可以编码成python字符串,python字符串可以解码成unicode类型。
您可以按照Peter所说的做,或者如果您希望用户输入某些内容,可以执行以下代码:
1 | raw_input('Type Something').lower() |
然后它将自动将他们键入的字符串转换为小写。
注:在python 3.x及以上版本中,
此外,还可以覆盖一些变量:
1 2 | s = input('UPPER CASE') lower = s.lower() |
如果您这样使用:
1 2 3 | s ="Kilometer" print(s.lower()) - kilometer print(s) - Kilometer |
它会在接到电话时工作。
不要尝试,完全不推荐,不要这样做:
1 2 3 | import string s='ABCD' print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s])) |
输出:
1 | abcd |
因为还没有人写它,所以你可以使用
1 2 | s='ABCD' print(s.swapcase()) |
输出:
1 | abcd |