web-dev-qa-db-ja.com

PythonでGUID/UUIDを作成する方法

プラットフォームに依存しないPythonでGUIDを作成するにはどうすればよいですか?私はWindows上でActivePythonを使う方法があると聞きますが、それはCOMを使うという理由だけでWindowsです。普通のPythonを使った方法はありますか?

533
Jonathon Watney

Python 2.5以降のuuidモジュールは、RFC準拠のUUID生成を提供します。詳細はモジュールのドキュメントとRFCを見てください。 [ ソース ]

ドキュメント:

例(2と3に取り組んでいる):

>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'
576
stuartd

Python 2.5以降を使っているのであれば、 uuidモジュール はすでにPython標準配布に含まれています。

例:

>>> import uuid
>>> uuid.uuid4()
UUID('5361a11b-615c-42bf-9bdb-e2c3790ada14')
313
Jay

コピー元: https://docs.python.org/2/library/uuid.html (投稿されたリンクはアクティブではなかったので更新されます)

>>> import uuid

>>> # make a UUID based on the Host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

データベースタイプの操作では、ランダムキーとしてGUIDを使用します。

ダッシュと余分な文字を含む16進形式は、私にとって不必要に長いように思えます。しかし、16進数を表す文字列は、 '+'、 '='などの状況で問題を引き起こす可能性のある文字が含まれていないという点で非常に安全です。

16進数の代わりに、URLセーフなbase64文字列を使用します。ただし、以下はUUID/GUIDの仕様には準拠していません(必要な量のランダム性を除いて)。

import base64
import uuid

# get a UUID - URL safe, Base64
def get_a_uuid():
    r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
    return r_uuid.replace('=', '')
28
Chris Dutrow

この関数は完全に設定可能で、指定されたフォーマットに基づいてユニークなUIDを生成します

例: - [8、4、4、4、12]、これは言及されたフォーマットであり、それは以下のuuidを生成します

LxoYNyXe-7hbQ-caJt-DSdU-PDAht56cMEWi

 import random as r

 def generate_uuid():
        random_string = ''
        random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        uuid_format = [8, 4, 4, 4, 12]
        for n in uuid_format:
            for i in range(0,n):
                random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)])
            if n != 12:
                random_string += '-'
        return random_string
3
Manoj Selvin

モデルまたは一意のフィールドの主キーにUUIDを渡す必要がある場合、以下のコードはUUIDオブジェクトを返します-

 import uuid
 uuid.uuid4()

URLのパラメーターとしてUUIDを渡す必要がある場合、以下のコードのようにできます-

import uuid
str(uuid.uuid4())

UUIDの16進値が必要な場合は、次のいずれかを実行できます-

import uuid    
uuid.uuid4().hex
2