- How to generate a random string in Python?
- Table of Contents: Python Max Function
- Importing string and random modules:
- Generate random string Python:
- String Module
- Random Module:
- Code and Explanation:
- String in different cases:
- Random string in uppercase:
- Using String.ascii.letters:
- Concatenating different types of string constants:
- Cryptographically Secure strings:
- Code and Explanation:
- Closing thoughts — Generate random string python:
- How To Use Python For Random String Generation
- Generating Python Random String
- Installation
- How to Generate Random Strings in Python
- Build a string from a random integer sequence
- Generate Random Strings in Python using the string module
- Make the random generation more secure
- Random UUID Generation
- Conclusion
- References
How to generate a random string in Python?
In this short tutorial, we look at how we can generate a random string in Python. We also look at all the various types of string that can be generated.
Table of Contents: Python Max Function
Importing string and random modules:
In order to generate random strings in Python, we use the string and random modules. The string module contains Ascii string constants in various text cases, digits, etc. The random module on the other hand is used to generate pseudo-random values. In the last method, we would be using the secrets module to help us generate cryptographically secure strings.
Generate random string Python:
Random strings are commonly generated and used widely. Although they serve a large number of use cases, the most common ones are random placeholder usernames, random phone numbers, passwords, etc.
String Module
- String.ascii_letters — returns a string of letters containing various cases.
- String.ascii_lowercase — returns a string with letters in lowercase.
- String.ascii_uppercase — returns a string with letters in uppercase.
- String.digits — returns a string containing digits
- String.punctuation — returns a string containing punctuations
Random Module:
- Random.choices — returns elements at random. Here characters can not be unique.
- Random.sample — returns unique elements.
Code and Explanation:
import random import string print(random.choices(string.ascii_lowercase))
This code generated returns one character at random. You can change the string constant method based on the characters you want.
Now let us write the code to generate a string of length 5.
import random import string print(''.join(random.choices(string.ascii_lowercase, k=5)))
For this, we pass another argument ‘k’ which denotes the size of the string. This method returns a list of characters, and hence we use the join method to convert it into a string.
String in different cases:
In the previous method, we used string.ascii_lowercase. Let us try the letters constantly, we can also concatenate two different types of constants.
Random string in uppercase:
import random import string print(''.join(random.choices(string.ascii_uppercase, k=5)))
Using String.ascii.letters:
import random import string print(''.join(random.choices(string.ascii_letters, k=5)))
Concatenating different types of string constants:
import random import string print(''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=5)))
I haven’t provided output snippets as my output would vary from yours. Also, in all the methods I have used the random.choices. Please feel free to try it out using the random.sample as well.
Cryptographically Secure strings:
While we could use the random method to generate random string in Python, the string generated is not cryptographically secure. Hence it is not recommended while creating temp passwords.
Python versions 3.6 and greater have a better way to generate a cryptographically secure random string. This method makes use of the secrets & string methods. Secrets are very similar to the random method, you can read more about it here.
Code and Explanation:
import secrets import string print(''.join(secrets.choice(string.ascii_uppercase + string.ascii_lowercase) for i in range(7)))
The secret methods do not have a .choices method which takes a second argument. Hence we use a loop and get the range to the number of characters.
Closing thoughts — Generate random string python:
Both methods can be used to generate a random string in Python. However, which method you use would largely depend on your use case.
A common mistake I have seen beginners make is forgetting to import the module before they use it. Do keep this in mind while you practice using the methods with other string contents.
How To Use Python For Random String Generation
An unpredictable and non-repetitive string of characters is referred to as a random string. In programming, random strings are crucial for several tasks, including the creation of test data, the development of unique IDs, the encryption of data, and the implementation of randomization-required algorithms. It makes programs more adaptable and robust by introducing a component of surprise and originality.
The random module in Python is an excellent utility that offers functions for producing random numbers, choices, and strings. It can produce random integers, floating-point numbers, sequences, and many more. The module allows programmers to create random strings in Python with altered compositions and lengths.
The generation of various data sets and the modeling of random events are made possible by this functionality. Python’s random module is a flexible and dependable tool for handling randomization in programming jobs because it also offers choices to create seeds for reproducibility or to use other sources for unpredictability.
In this tutorial on using Python for random string generation, we are going to look at Python modules like random, secrets, and uuid for creating random strings. In addition to discussing the installation process, we will see different methods provided by random module like random.randint(), random.sample(), random.choice(), and random.choices(). To get hands-on with the methods we are going to create alphanumeric, lowercase/uppercase, and particular character/symbol strings of varied lengths using examples. The secrets module’s advanced features, such as secrets.choice(), secrets.token_bytes(), secrets.token_hex(), and many more methods will also be covered. We’ll talk about real-world uses including creating passwords, test data, and UUIDs. We’ll cover comparisons, and best practices. By the end of this tutorial, you will be able to use Python to efficiently generate random strings.
TABLE OF CONTENTS
Generating Python Random String
The random module is a Python in-built module. This module implements pseudo-random number generators for various distributions like int and float-point. Pseudo-random implies that the generated numbers are not truly random.
There is a uniform selection from a range of integers. For sequences, some functions produce random permutations of lists in place, uniformly select a random element, and perform random sampling without replacement. It is possible to compute the uniform, normal (Gaussian), lognormal, negative exponential, gamma, and beta distributions on the real line. The von Mises distribution is available for producing angle distributions.
Installation
The random module doesn’t require installation. It is a built-in Python module; it can simply be imported into a working file to import the necessary functions or the entire module. To import the random module in a .py file, write the following code:
How to Generate Random Strings in Python
In this article, we’ll take a look at how we can generate random strings in Python. As the name suggests, we need to generate a random sequence of characters, it is suitable for the random module.
There are various approaches here, so we’ll start from the most intuitive one; using randomized integers.
Build a string from a random integer sequence
As you may know, the chr(integer) maps the integer to a character, assuming it lies within the ASCII limits. (Taken to be 255 for this article)
We can use this mapping to scale any integer to the ASCII character level, using chr(x) , where x is generated randomly.
import random # The limit for the extended ASCII Character set MAX_LIMIT = 255 random_string = '' for _ in range(10): random_integer = random.randint(0, MAX_LIMIT) # Keep appending random characters using chr(x) random_string += (chr(random_integer)) print(random_string, len(random_string))
Sample Output
Here, while the length of the string seems to be 10 characters, we get some weird characters along with newlines, spaces, etc.
This is because we considered the entire ASCII Character set.
If we want to deal with only English alphabets, we can use their ASCII values.
import random random_string = '' for _ in range(10): # Considering only upper and lowercase letters random_integer = random.randint(97, 97 + 26 - 1) flip_bit = random.randint(0, 1) # Convert to lowercase if the flip bit is on random_integer = random_integer - 32 if flip_bit == 1 else random_integer # Keep appending random characters using chr(x) random_string += (chr(random_integer)) print(random_string, len(random_string))
Sample Output
As you can see, now we have only upper and lowercase letters.
But we can avoid all this hassle, and have Python do the work for us. Python has given us the string module for exactly this purpose!
Let’s look at how we can do the same this, using just a couple of lines of code!
Generate Random Strings in Python using the string module
The list of characters used by Python strings is defined here, and we can pick among these groups of characters.
We’ll then use the random.choice() method to randomly choose characters, instead of using integers, as we did previously.
Let us define a function random_string_generator() , that does all this work for us. This will generate a random string, given the length of the string, and the set of allowed characters to sample from.
import random import string def random_string_generator(str_size, allowed_chars): return ''.join(random.choice(allowed_chars) for x in range(str_size)) chars = string.ascii_letters + string.punctuation size = 12 print(chars) print('Random String of length 12 =', random_string_generator(size, chars))
Here, we have specified the allowed list of characters as the string.ascii_letters (upper and lowercase letters), along with string.punctuation (all punctuation marks).
Now, our main function was only 2 lines, and we could randomly choose a character, using random.choice(set) .
Sample Output
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;?@[\]^_`<|>~ Random String of length 12 = d[$OmWe have indeed generated a random string, and the string module allows easy manipulations between character sets!
Make the random generation more secure
While the above random generation method works, if you want to make your function be more cryptographically secure, use the random.SystemRandom() function.
An example random generator function is shown below:
import random import string output_string = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(10)) print(output_string)This ensures that your string generation is cryptographically secure.
Random UUID Generation
If you want to generate a random UUID String, the uuid module is helpful for this purpose.
import uuid # Generate a random UUID print('Generated a random UUID from uuid1():', uuid.uuid1()) print('Generated a random UUID from uuid4():', uuid.uuid4())Sample Output
Generated a random UUID from uuid1(): af5d2f80-6470-11ea-b6cd-a73d7e4e7bfe Generated a random UUID from uuid4(): 5d365f9b-14c1-49e7-ad64-328b61c0d8a7Conclusion
In this article, we learned how we could generate random strings in Python, with the help of the random and string modules.
References