Python Random String Generator

You never know when you might need to generate a random string while writing Python code, and it’s good to know how.

Some examples of when you might want to use a random string generator include:

  • Generating unique IDs for objects or records in a database
  • Generating random passwords for use in a login system
  • Creating random strings for use in testing or debugging
  • Generating random strings for use in games or simulations
  • Generating random strings to use as inputs for machine learning algorithms

There are many potential uses for a Python random string generator, depending on the specific needs of your application or project. This article will show you a couple of different ways to write a random string generator in Python. Why not have a go for yourself before reading on, by completing the following function stub?

def random_string(length):
    population = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    ...

print(random_string(10)) 

Sample output:

ZlYzP8

Writing a Random String Generator in Python

Here is one possible approach to creating a random string generator in Python:

import random

def generate_random_string(length):
    population = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    return ''.join(random.choices(population, k=length))


print(generate_random_string((10))) 

Sample output:

c6qgw8M0MM

Notice that what we did here was to define a custom population for allowable characters, then use the random.choices() method with the population as a parameter, and the k value (size of result) as the length we passed in during our function call.

We also used the .join() string method, which can be somewhat confusing until you get used to it. It basically takes all items in an iterable (list, tuple etc.) and joins them into one string.

using the Python String Module to make a Random String Generator

If you want to save yourself the effort of defining your population of allowable characters, you could use the built in string module.

Here is a simple function that generates a random string of a given length using Python’s random and string modules. Take a look at the code below:

import string

print(string.ascii_letters)
print(string.digits)

Output:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789

You can see that this gives you access to string.ascii_letters and string.digits, which you can use in your code.

import string
import random

def generate_random_string(length):
    return ''.join(random.choices(string.ascii_letters + string.digits, k=length))

You can use this function like this:

random_string = generate_random_string(10)
print(random_string)  # Output: "4Bd2zJj9yC"

This will generate a random string of length 10, consisting of upper and lowercase ASCII letters and digits.

The string module is used in the example code to provide access to a string of ASCII letters and digits. These characters are used as the population from which the random string is generated. The string module is not strictly necessary for generating a random string, as you could use any other string or character set as the population. However, it provides a convenient way to access a common set of ASCII characters that is often used for generating random strings.

To see what else the string module offers, try this (or search online):

for item in dir(string):
    print(item)

Truncated output:

ascii_letters
ascii_lowercase
ascii_uppercase
capwords
digits
hexdigits
octdigits
printable
punctuation
whitespace

So for another example you could do:

import random

def generate_random_string(length):
    return ''.join(random.choices(string.ascii_lowercase, k=length))

This time, only lowercase letters would be used. If you like, go ahead and explore some different methods from the string module, to make a custom Python random string generator to meet your specific needs.


This article has shown how to make a random string generator in Python. I hope you found it interesting and helpful. Happy computing!

Sharing is caring!

Leave a Reply

Your email address will not be published. Required fields are marked *