IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python ランダムな文字列生成

どうも、nippa です。

テストデータ作るときに、数字は簡単に乱数生成できますが、

文字列はどうするのか気になったので、まとめておきます。

環境

アルファベット 1 文字のランダム生成(chr)

1 文字のアルファベットの生成は chr と乱数を使って生成できます。

アルファベットの小文字は chr で ASCII コードポイント 97 から 123 を指定することで表示できます。

for n in range(97, 123):
     print(chr(i))

指定する i を乱数で指定すればアルファベットをランダムは 1 文字生成できます。

import random

# 小文字 a-z
print(chr(random.range(97, 123))

大文字の場合は chr の ASCII コードポイントは 65 から 91 になります。

import random

# 大文字 A-Z
print(chr(random.range(65, 91))

アルファベット 1 文字のランダム生成(string)

python 標準の string を利用する方法だと、少し手間ですが、文字列生成のときは便利です。

import string

# 小文字 a-z
for n in string.ascii_lowercase:
     print(n)

# 大文字 a-z
for n in string.ascii_uppercase:
     print(n)

# 小文字・大文字 a-Z
for n in string.ascii_letters:
     print(n)

# 数字(10進数)
for n in string.digits:
     print(n)

# 数字(16進数)
for n in string.hexdigits:
     print(n)

# Cロケールにおける区切り文字 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
for n in string.punctuation:
     print(n)

公式のページを見てもらうと String ライブラリの詳細が書かれています。

random ライブラリを使ってランダム生成します。

import random
import string

# 小文字 a-z
random.choice(string.ascii_lowercase)

# 大文字 a-z
random.choice(string.ascii_uppercase)

# 小文字・大文字 a-Z
random.choice(string.ascii_letters)

# 数字(10進数)
random.choice(string.digits)

# 数字(16進数)
random.choice(string.hexdigits)

# Cロケールにおける区切り文字 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
random.choice(string.punctuation)

ランダムな文字列の生成

上で述べた、String ライブラリと random ライブラリを利用した文字のランダム生成を任意の長さに拡張します。

小文字だけの場合、

import random
import string


n = 10
random_list = [random.choice(string.ascii_lowercase) for n in range(n)]
random_chr = "".join(random_list)

print(random_chr)

で生成できます。 n の値を変えれば任意になるので関数化すると、

import random
import string


def ramdom_lowercase(n: int) -> str:
    random_list = [random.choice(string.ascii_lowercase) for n in range(n)]
    return "".join(random_list)

となります。大文字・小文字・区切り文字からランダム生成する場合は、

import random
import string


def ramdom_chr(n: int) -> str:
    random_list = [random.choice(string.ascii_ascii_letters + string.punctuation) for n in range(n)]
    return "".join(random_list)

で関数化できます。

感想

テストデータでデータを突っ込むときに使えるかと思いまとめてみました。

手作業で作っていられない膨大なデータはこれで生成しましょう!

ではでは、また次回。