Pythonで「ランダム文字列」生成する方法を紹介します。
ランダム数値は「ramdom」ライブラリを利用すれば簡単に作成できますが、
ランダム文字列の場合は「random」ライブラリと「string」ライブラリを利用して生成します。
目次
ランダム文字列を生成
ランダム文字列を使用するために、「a~z、A~Z」、「0~9」の文字定数を用意し、
文字定数内の文字を1つずつランダムで選んであげることでランダム文字列が生成されます。
「a~z、A~Z」、「0~9」の文字定数を用意するのが「string」ライブラリで、
ランダムに選んであげるために「random」ライブラリを使用します。
下のサンプルでは10文字のランダム文字列が生成されます。
import random
import string
''.join(random.choice(string.ascii_letters + string.digits) for i in range(10))
「string.ascii_letters」は「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」が格納されており、
「string.digits」は「0123456789」が格納されております。
作成した文字列定数を「random.choice」で1文字ずつ取得してはリスト内包表記でjoinさせます。
サンプル:パスワードの長さを指定してランダム文字列を生成
文字列の長さを指定するとランダムで文字列を生成してくれるプログラムになります。
import random
import string
if __name__ == '__main__':
symbolLetters = ' !#$%&()*+,-./:;<=>?@[]^_`{|}~'
passsphraseLength = input('Input passprase lingth (lingth >= 8) : ')
if passsphraseLength.isdigit() == False:
print('Input is "' + passsphraseLength + '"')
print('Please input digit.')
exit(1)
if int(passsphraseLength) < 8:
print('Passphrase length is not long enough. Length is '+ passsphraseLength)
exit(2)
elif int(passsphraseLength) > 100:
print('Passphrase length is too long. Length is '+ passsphraseLength)
exit(2)
passphraseRamdom = ''.join(random.choice(string.ascii_letters + string.digits + symbolLetters) \
for i in range(int(passsphraseLength)))
print('Passphrase is "' + passphraseRamdom + '" (ramdon)"')
5行目で記号文字を「symbolLetters」変数で指定します。
Input passprase lingth (lingth >= 8) : 10
Passphrase is "(,2pO?JutV" (ramdon)"
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミングposted with ヨメレバ
Al Sweigart オライリージャパン 2017-06-03