Pythonでランダムな文字列を作る方法!!

一時的にファイルを保存する時に適当なファイル名を作りたい時、意味のない文字列でパスワードを作りたい時など、ありませんか!?

そんな時に便利な、「ランダムな文字列」を組み立てる方法をご紹介したいと思います!(*´ω`*)

せっかくなので、Pythonらしく書いてみたいと思います!(`・ω・´)ゞ

ランダムな文字列の候補

まずは、ランダムに選ぶ文字の候補を定義します。Pythonでは「stringモジュール」を使うと便利です!a~zは「ascii_lowercase」、A~Zは「ascii_uppercase」、数字は「digits」で取得することができます!

import string

c = string.ascii_lowercase + string.ascii_uppercase + string.digits
print c

# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
ファイル名で使用したい場合は、大文字・小文字を区別しないので「string.ascii_uppercase」は必要ない場合もあります。

ランダムに選ぶ

Pythonでランダムといえば「randomモジュール」を使いますが、色々種類があります。今回は、「ランダムな文字列の候補」から適当に選びたいので「choice」を使いたいと思います。

import string
import random

c = string.ascii_lowercase + string.ascii_uppercase + string.digits
print random.choice(c)

これで実行するたびに、ランダムな文字列の候補から適当に選ばれた1文字が表示されます。

リスト内表記で繰り返す

シンプルに「for文」で繰り返して文字列を組み立ててもいいのですが、折角Pythonなので「リスト内表記」を使って必要な文字数揃えたいと思います!

リスト内表記の基本文は、以下の通りです!

data = [counter for counter in iterator]

これに当てはめて書くと、以下のようになります(`・ω・´)ゞ

import string
import random

c = string.ascii_lowercase + string.ascii_uppercase + string.digits
n = 10# ランダムな文字列の字数
print [random.choice(c) for i in range(n)]# 指定された回数繰り返す

# ['N', 'x', 'R', '7', '1', 'K', 'B', 'i', 'V', 'c'] ←毎回結果が変わります

リスト内表記で記述すると、どうしてもlist型になってしまいます。これでは色々使いにくいので「join」を使って、リストの要素をつなげて文字列にします!

import string
import random

c = string.ascii_lowercase + string.ascii_uppercase + string.digits
n = 10# ランダムな文字列の字数
print ''.join([random.choice(c) for i in range(n)])# 指定された回数繰り返して、joinで連結する

# 1Vcvuir49S ←毎回結果が変わります

関数化

そんなに多用するものでもないと思いますが、折角なので関数にしてみたいと思います!欲しい文字数は引数で指定できるようにします。

import string
import random

def randomCharacter(n):
    c = string.ascii_lowercase + string.ascii_uppercase + string.digits
    return ''.join([random.choice(c) for i in range(n)])

実行してみると、好きな字数のランダム文字列が簡単に作れるようになります!(*´ω`*)b

print randomCharacter(10)
# cJjCSiOosO ←毎回結果が変わります