Bagaimana cara membuat GUID dengan Python yang independen terhadap platform? Saya mendengar ada metode menggunakan ActivePython di Windows tetapi Windows hanya karena menggunakan COM. Apakah ada metode menggunakan Python biasa?
python
uuid
guid
uniqueidentifier
Jonathon Watney
sumber
sumber
python -c 'import uuid; print(uuid.uuid4())'
Jawaban:
Docs:
Contoh (mengerjakan 2 dan 3):
sumber
shortuuid
modul yang saya tulis, karena memungkinkan Anda untuk menghasilkan UUID yang lebih pendek dan mudah dibaca: github.com/stochastic-technologies/shortuuiduuid4().hex
danstr(uuid4())
?str(uuid4())
mengembalikan representasi string UUID dengan tanda hubung termasuk, sementarauuid4().hex
mengembalikan "UUID sebagai string heksadesimal 32-karakter"Jika Anda menggunakan Python 2.5 atau lebih baru, modul uuid sudah disertakan dengan distribusi standar Python.
Ex:
sumber
Disalin dari: https://docs.python.org/2/library/uuid.html (Karena tautan yang dipasang tidak aktif dan terus diperbarui)
sumber
Saya menggunakan GUID sebagai kunci acak untuk operasi tipe database.
Bentuk heksadesimal, dengan tanda hubung dan karakter tambahan sepertinya terlalu panjang bagi saya. Tapi saya juga suka bahwa string yang mewakili angka heksadesimal sangat aman karena tidak mengandung karakter yang dapat menyebabkan masalah dalam beberapa situasi seperti '+', '=', dll.
Alih-alih heksadesimal, saya menggunakan string base64 url-safe. Berikut ini tidak sesuai dengan spesifikasi UUID / GUID (selain memiliki jumlah keacakan yang diperlukan).
sumber
random.getrandbits(128).to_bytes(16, 'little')
atau (untuk keacakan crypto)os.urandom(16)
dan mendapatkan 128 bit acak (UUIDv4 menggunakan 6-7 bit pada info versi). Atau gunakan hanya 15 byte (kehilangan 1-2 bit acak vs UUIDv4) dan menghindari kebutuhan untuk memangkas=
tanda - tanda sementara juga mengurangi ukuran yang dikodekan menjadi 20 byte (dari 24, dipangkas menjadi 22), karena setiap kelipatan dari 3 byte encode ke#bytes / 3 * 4
base64 karakter tanpa padding diperlukan.return
pernyataan yang mengharapkan objek seperti byte. Itu bisa diperbaiki denganreturn str(r_uuid).replace('=','')
.Jika Anda perlu melewati UUID untuk kunci utama untuk model atau bidang unik Anda, maka di bawah ini kode mengembalikan objek UUID -
Jika Anda harus melewati UUID sebagai parameter untuk URL yang dapat Anda lakukan seperti kode di bawah ini -
Jika Anda ingin nilai hex untuk UUID Anda dapat melakukan yang di bawah ini -
sumber
Fungsi ini sepenuhnya dapat dikonfigurasi dan menghasilkan cairan unik berdasarkan format yang ditentukan
misalnya: - [8, 4, 4, 4, 12], ini adalah format yang disebutkan dan akan menghasilkan uuid berikut
sumber
2019 Answer (untuk Windows):
Jika Anda menginginkan UUID permanen yang mengidentifikasi mesin secara unik di Windows, Anda dapat menggunakan trik ini: (Disalin dari jawaban saya di https://stackoverflow.com/a/58416992/8874388 ).
Menggunakan Windows API untuk mendapatkan UUID permanen komputer, lalu memproses string untuk memastikannya adalah UUID yang valid, dan terakhir mengembalikan objek Python ( https://docs.python.org/3/library/uuid.html ) yang memberi Anda kenyamanan cara untuk menggunakan data (seperti integer 128-bit, string hex, dll).
Semoga berhasil!
PS: Panggilan subproses mungkin bisa diganti dengan ctypes yang langsung memanggil Windows kernel / DLL. Tetapi untuk tujuan saya fungsi ini yang saya butuhkan. Itu validasi yang kuat dan menghasilkan hasil yang benar.
sumber
Periksa posting ini , banyak membantu saya. Singkatnya, pilihan terbaik bagi saya adalah:
Karena saya hanya membutuhkan 4-6 karakter acak daripada GUID besar.
sumber