[python]ランダムな文字列を重複なく作成する(すぐ使えるコードあり)

記事内に広告が含まれています。

アルファベットだけ,数字混じりなど多数のバリエーションの文字列をランダムに生成する方法を解説します.

結論

以下のコードをローカルにコピーして実行すればターミナル上に生成された文字列が表示されます.

#makeRandomStrings.py
import random, string, csv

## 何個欲しいか
KOSUU = 10
## 文字列の長さ
stringLength = 3

#ランダム文字列生成関数
def randomStrings(len):
    result = [random.choice(string.ascii_letters) for _ in range(len)]
    return "".join(result)

#作った文字列を重複なく管理する部分
generatedStrings = set()
kosuu = 0
while kosuu < KOSUU:
    res = randomStrings(stringLength)
    if res not in generatedStrings:
        generatedStrings.add(res)
        kosuu += 1

print(generatedStrings)

実行例(python3.8で実行)

$python makeRandomStrings.py
{'RcZ', 'gas', 'Txu', '0s2', 'EZd', 'Xkz', 'U51', 'eiO', 'nWN', 'O62'}

生成する文字列のTips

文字列長もランダムに変えたい場合

ランダム文字列生成関数を以下のように変更します.

#ランダム文字列生成関数 変更前
def randomStrings(len):
    result = [random.choice(string.ascii_letters) for _ in range(len)]
    return "".join(result)

#↓
#ランダム文字列生成関数 変更後
def randomStrings(minLength=3, maxLength=10):
    length = random.randint(minLength, maxLength) # 3<= <10の間の整数値を一個ランダムに生成
    result = [random.choice(string.ascii_letters) for _ in range(length)]
    return "".join(result)

文字列に数字や記号を含ませたい場合

15行目の引数に以下を追加します.

#アルファベット+数字の組み合わせ
result = [random.choice(string.ascii_letters+string.digits) for _ in range(len)]
#アルファベット+記号の組み合わせ
result = [random.choice(string.ascii_letters+string.punctuation) for _ in range(len)]

重複があっても構わない場合

19行目をset(集合型)からlist(リスト型)へ変更すればokです.

#重複なし
generatedStrings = set()
#重複あり
generatedStrings = list()

カンマ区切りでファイル保存したい場合

上記のコードの末尾に,以下のコードを付け足します.

f = open("out.csv", "a")
for i, str in enumerate(list(generatedStrings)):
    f.write(str+",")
f.close()

まとめ

pythonでランダムに文字列を生成する方法についてまとめました.プログラムのテストデータを作るときなどに重宝すると思います.

参考になれば幸いです.

Python
スポンサーリンク