题 如何在Python中将字符串转换为小写


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

例如。公里 - >公里。


1486
2017-07-23 03:08


起源


另一个非常有趣的用例是将整个字符串转换为小写,除了第一个字符。它可以完成 str.capitalize()。相关帖子 - python capitalize()在以space开头的字符串上 & 如何将字符串中每个单词的首字母大写(Python)? - RBT


答案:


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

官方文件是 str.lower()


2333
2017-07-23 03:09





使用Python 2,这不适用于UTF-8中的非英语单词。在这种情况下 decode('utf-8') 可以帮助:

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

158
2017-10-03 08:02



也许我们应该更明确地说这个 decode('utf-8') 不仅在Python 3中不必要,而且会导致错误。 (REF)。例: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode' 我们可以看到第二种方法,参考@AaronHall的优秀答案。 >>>s.casefold() #result: километр - bballdave025


如何在Python中将字符串转换为小写?

有没有办法将整个用户输入的字符串从大写,甚至部分大写转换为小写?

例如。公里 - >公里

规范的Pythonic方法是这样做的

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

但是,如果目的是进行不区分大小写的匹配,则应使用大小写折叠:

>>> 'Kilometers'.casefold()
'kilometers'

原因如下:

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

Python 3 将unicode作为常规字符串处理:

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

Unicode Python 2

但是Python 2没有,下面粘贴到shell中,使用的字符串将字符串编码为字节串 utf-8

lower 没有映射本机Unicode对象可能知道的任何更改,因此我们得到相同的字符串。

>>> 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中的警告)字节在没有给出编码的字符串中,因为预期的编码将是不明确的。有关更多信息,请参阅中的Unicode操作方法 文档 和 PEP 263

不使用Unicode文字 str 文字

所以我们需要一个 unicode 用于处理此转换的字符串,可以使用unicode文字轻松完成:

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

请注意,字节与完全不同 str bytes - 转义字符 '\u' 然后是2字节宽度,或者这些的16位表示 unicode 信件:

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

现在,如果我们只有一个的形式 str,我们需要将其转换为 unicode。 Python的Unicode类型是一种通用的编码格式,有很多种 优点 相对于大多数其他编码。我们可以使用 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

两种方法都转换为unicode类型 - 与unicode_literal相同。

最佳实践,使用Unicode

总是建议你 使用Unicode中的文本

软件应仅在内部使用Unicode字符串,在输出时转换为特定编码。

必要时可以编码

但是,要将小写字母改回类型 str,将python字符串编码为 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可以编码为Python字符串,Python字符串可以解码为Unicode类型。


105
2017-07-23 22:40



这是最完整,最便携的答案。在我看来,它应该是正确的。特别感谢“但是,如果目的是进行不区分大小写的匹配,则应使用大小写折叠”+1 - bballdave025
我有一个注释不一定适用于OP的问题,但在进行不区分大小写的匹配时,这对于可移植性(国际化)很重要。对于不区分大小写的匹配,变音符号(重音符号)可能会成为一个问题。例: >>> "raison d'être".casefold(); "raison d'être" 查看 这个答案 关于 unidecode - bballdave025


你可以做什么 彼得说,或者如果您希望用户输入内容,您可以执行以下代码:

raw_input('Type Something').lower()

然后它会自动将键入的字符串转换为小写。

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


70
2017-07-23 04:34



请注意,没有“或”这个,它不是一个不同的技术。 input() 返回一个字符串,然后您可以将字符串方法应用到其中,就像Petar演示的那样。 - Félix Saparelli
不必要地扩大问题;这只是小写而不是输入 - ppperry


此外,您可以覆盖一些变量:

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

如果你这样使用:

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

它会在被调用时起作用。


17
2017-11-18 18:35



问题是如何将字符串转换为小写。这个答案怎么得到这么多的选票? - Munim Munna
s=s.lower() 是要走的路。 - m00lti


string.lower() 用于将字符串转换为小写字符串。

例如:

word = "Turn Th!S !nt0 a L0w3rCas3! $string"
print(word.lower())

在这种情况下,所有字母表都将转换为小写字母。


0
2017-07-16 12:12





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

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

但要小写整个字符串,请执行

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

-1
2018-02-28 22:49



result = text.title() - Corey Goldberg
你只希望第一个角色是小写的  - OP何时说出来? - Munim Munna