如何在Python中小写一个字符串?

Ben*_*dur 1908 python string lowercase uppercase

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

例如公里 - >公里.

Pet*_*nov 2914

使用.lower()- 例如:

s = "Kilometer"
print(s.lower())
Run Code Online (Sandbox Code Playgroud)

官方2.x文档在这里: 官方3.x文档在这里:str.lower()
str.lower()

  • 不仅适用于 ASCII,它还适用于许多变音符号,例如 `ÀÇÐÊĞіŃÓŒŘŠŤÚŻ`,但是无点 i `"ı".upper().lower()` 会变成 `i`,而上点点 `ı` 则被保留,谢谢到“上面的组合点(0x307)”。 (3认同)
  • 这仅适用于 ASCII 字符,如果您没有获得预期的字符串,您可能需要使用“str.maketrans”和“str.translate”。 (2认同)

Aar*_*all 205

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

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

例如公里 - >公里

规范的Pythonic方法是这样做的

>>> 'Kilometers'.lower()
'kilometers'
Run Code Online (Sandbox Code Playgroud)

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

>>> 'Kilometers'.casefold()
'kilometers'
Run Code Online (Sandbox Code Playgroud)

原因如下:

>>> "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
Run Code Online (Sandbox Code Playgroud)

这是Python 3中的str方法,但是在Python 2中,你需要查看PyICU或py2casefold - 这里有几个答案可以解决这个问题.

Unicode Python 3

Python 3将纯字符串文字作为unicode处理:

>>> string = '????????'
>>> string
'????????'
>>> string.lower()
'????????'
Run Code Online (Sandbox Code Playgroud)

Python 2,普通字符串文字是字节

在Python 2中,下面粘贴到shell中,将文字编码为字节串,使用utf-8.

并且lower没有映射字节可以识别的任何更改,因此我们得到相同的字符串.

>>> 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()
????????
Run Code Online (Sandbox Code Playgroud)

在脚本中,Python将反对非ascii(从Python 2.5开始,在Python 2.4中的警告)字节在没有给出编码的字符串中,因为预期的编码将是不明确的.有关更多信息,请参阅文档PEP 263中的Unicode操作方法

使用Unicode文字,而不是str文字

所以我们需要一个unicode字符串来处理这个转换,使用unicode字符串文字很容易实现,它用u前缀消除歧义(并注意u前缀也适用于Python 3):

>>> unicode_literal = u'????????'
>>> print(unicode_literal.lower())
????????
Run Code Online (Sandbox Code Playgroud)

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

>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
Run Code Online (Sandbox Code Playgroud)

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

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

最佳实践,使用Unicode

建议您始终使用Unicode中的文本.

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

必要时可以编码

但是,要在类型中返回小写str,请utf-8再次编码python字符串:

>>> 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')
????????
Run Code Online (Sandbox Code Playgroud)

因此在Python 2中,Unicode可以编码为Python字符串,Python字符串可以解码为Unicode类型.


Vla*_*voy 195

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

>>> s='????????'
>>> print s.lower()
????????
>>> print s.decode('utf-8').lower()
????????
Run Code Online (Sandbox Code Playgroud)

  • 也许我们应该更明确地说,`decode('utf-8')`不仅在Python 3中是不必要的,而且会导致错误.([参考](/sf/ask/2000849581/)).示例:`$ python3; >>> S = 'Километр'; >>> print(s.lower); #result:километр>>> s.decode('utf-8').lower(); #result:... AttributeError:'str'对象没有属性'decode'.我们可以看到第二种方法,参考@AaronHall的优秀答案.`>>> s.casefold()#result:километр` (8认同)

小智 17

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

s = input('UPPER CASE')
lower = s.lower()
Run Code Online (Sandbox Code Playgroud)

如果你这样使用:

s = "Kilometer"
print(s.lower())     - kilometer
print(s)             - Kilometer
Run Code Online (Sandbox Code Playgroud)

它会在被调用时起作用.

  • 问题是如何将字符串转换为小写.这个答案怎么得到这么多的选票? (8认同)
  • `s=s.lower()` 是正确的选择。 (2认同)

U10*_*ard 6

不要尝试这个,完全不推荐,不要这样做:

import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))
Run Code Online (Sandbox Code Playgroud)

输出:

abcd
Run Code Online (Sandbox Code Playgroud)

由于还没有人写它,所以你可以使用swapcase(所以大写字母将变成小写,反之亦然)(在我刚才提到的情况下你应该使用这个(将大写字母转换为小写字母,将小写字母转换为大写字母)):

s='ABCD'
print(s.swapcase())
Run Code Online (Sandbox Code Playgroud)

输出:

abcd
Run Code Online (Sandbox Code Playgroud)