アルファベットだけ,数字混じりなど多数のバリエーションの文字列をランダムに生成する方法を解説します.
結論
以下のコードをローカルにコピーして実行すればターミナル上に生成された文字列が表示されます.
#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でランダムに文字列を生成する方法についてまとめました.プログラムのテストデータを作るときなどに重宝すると思います.
参考になれば幸いです.
リンク