How do I lowercase a string in Python?


Is there a way to convert a string to lowercase?

"Kilometers"  →  "kilometers"
Asked By: Benjamin Didur



Use str.lower():

Answered By: Petar Ivanov

Also, you can overwrite some variables:

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

If you use like this:

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

It will work just when called.

Answered By: ergo

With Python 2, this doesn’t work for non-English words in UTF-8. In this case decode('utf-8') can help:

>>> s='Километр'
>>> print s.lower()
>>> print s.decode('utf-8').lower()
Answered By: Vladimir Gorovoy

The canonical Pythonic way of doing this is

>>> 'Kilometers'.lower()

However, if the purpose is to do case insensitive matching, you should use case-folding:

>>> 'Kilometers'.casefold()

Here’s why:

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

This is a str method in Python 3, but in Python 2, you’ll want to look at the PyICU or py2casefold – several answers address this here.

Unicode Python 3

Python 3 handles plain string literals as unicode:

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

Python 2, plain string literals are bytes

In Python 2, the below, pasted into a shell, encodes the literal as a string of bytes, using utf-8.

And lower doesn’t map any changes that bytes would be aware of, so we get the same string.

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

In scripts, Python will object to non-ascii (as of Python 2.5, and warning in Python 2.4) bytes being in a string with no encoding given, since the intended coding would be ambiguous. For more on that, see the Unicode how-to in the docs and PEP 263

Use Unicode literals, not str literals

So we need a unicode string to handle this conversion, accomplished easily with a unicode string literal, which disambiguates with a u prefix (and note the u prefix also works in Python 3):

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

Note that the bytes are completely different from the str bytes – the escape character is 'u' followed by the 2-byte width, or 16 bit representation of these unicode letters:

>>> unicode_literal
>>> unicode_literal.lower()

Now if we only have it in the form of a str, we need to convert it to unicode. Python’s Unicode type is a universal encoding format that has many advantages relative to most other encodings. We can either use the unicode constructor or str.decode method with the codec to convert the str to 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

Both methods convert to the unicode type – and same as the unicode_literal.

Best Practice, use Unicode

It is recommended that you always work with text in Unicode.

Software should only work with Unicode strings internally, converting to a particular encoding on output.

Can encode back when necessary

However, to get the lowercase back in type str, encode the python string to utf-8 again:

>>> print string
>>> string
>>> string.decode('utf-8')
>>> string.decode('utf-8').lower()
>>> string.decode('utf-8').lower().encode('utf-8')
>>> print string.decode('utf-8').lower().encode('utf-8')

So in Python 2, Unicode can encode into Python strings, and Python strings can decode into the Unicode type.

Don’t try this, totally un-recommend, don’t do this:

import string
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))



Since no one wrote it yet you can use swapcase (so uppercase letters will become lowercase, and vice versa) (and this one you should use in cases where i just mentioned (convert upper to lower, lower to upper)):



Answered By: U13-Forward

There are several different ways in which this can be done.

  1. Using .lower() method
original_string = "UPPERCASE"
lowercase_string = original_string.lower()
print(lowercase_string)  # Output: "uppercase"
  1. Using str.lower()
original_string = "UPPERCASE"
lowercase_string = str.lower(original_string)
print(lowercase_string)  # Output: "uppercase"
  1. Using combination of str.translate() and str.maketrans()
original_string = "UPPERCASE"
lowercase_string = original_string.translate(str.maketrans(string.ascii_uppercase, string.ascii_lowercase))
print(lowercase_string)  # Output: "uppercase"
Answered By: BouncyBits


This method not only converts all uppercase letters of the Latin alphabet into lowercase ones, but also shows how such logic is implemented. You can test this code in any online Python sandbox.

def turnIntoLowercase(string):
    lowercaseCharacters = ''
    abc = ['a','b','c','d','e','f','g','h','i','j','k','l','m', 
    for character in string:
        if character not in abc:
            lowercaseCharacters += character
        elif abc.index(character) <= 25:
            lowercaseCharacters += character
            lowercaseCharacters += abc[abc.index(character) - 26]
    return lowercaseCharacters

string = str(input("Enter your string, please: " ))

print(turnIntoLowercase(string = string))

Performance check

Now, let’s enter the following string (and press Enter) to make sure everything works as intended:

# Enter your string, please: 

"PYTHON 3.11.2, 15TH FeB 2023"


"python 3.11.2, 15th feb 2023"
Answered By: Andy Jazz

If you want to convert a list of strings to lowercase, you can map str.lower:

list_of_strings = ['CamelCase', 'in', 'Python']
list(map(str.lower, list_of_strings))            # ['camelcase', 'in', 'python']
Answered By: cottontail
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.