পাইথনে এলোমেলো স্ট্রিং


96

পাইথনে আপনি কীভাবে এলোমেলো স্ট্রিং তৈরি করবেন?

আমার এটির সংখ্যা হওয়া দরকার, চরিত্র পুনরাবৃত্তি হওয়া অবধি আপনি এটি তৈরি না করা পর্যন্ত আমি তৈরি করেছি

def random_id(length):
    number = '0123456789'
    alpha = 'abcdefghijklmnopqrstuvwxyz'
    id = ''
    for i in range(0,length,2):
        id += random.choice(number)
        id += random.choice(alpha)
    return id

আরও সুনির্দিষ্ট হন, আপনি যা খুঁজছেন তার কয়েকটি উদাহরণ দিন।
সুবেরি

উত্তর:


224

(উদাহরণস্বরূপ) ছোট হাতের অক্ষর থেকে স্ট্রিং তৈরি করা:

import random, string

def randomword(length):
   letters = string.ascii_lowercase
   return ''.join(random.choice(letters) for i in range(length))

ফলাফল:

>>> randomword(10)
'vxnxikmhdc'
>>> randomword(10)
'ytqhdohksy'

4
এখন পর্যন্ত সেরা উত্তর। আমি ব্যবহার করব randomword(length, source_alpha=string.lowercase)এবং xrange(length), যদিও।
হ্যাঙ্ক গে

4
মনে রাখবেন যে এটি খুব ভাল উত্তর হলেও, ওপিকে প্রশ্নটি অবৈধ করার জন্য এটি পরিবর্তন করেছে। এবং তার নিজের উত্তর সরবরাহ করতে।
ব্লেয়ার কনরাড

29
পাইথন 3 সামঞ্জস্যের জন্য, ব্যবহার করুনstring.ascii_lowercase
ডগউইন

@ ব্লেয়ারকনরড: আমি বলব যে প্রশ্নটি খুব বিস্তৃত ছিল উদাহরণস্বরূপ, আসল প্রশ্নেরos.urandom(length) উত্তর দিন এবং @sth ওপির মনকে ভুলভাবে পড়েছিলেন।
jfs

4
পাইথন ৩.6 থেকে random.choicesদ্রুততর হবে।
ইয়ানস

59

যেহেতু এই প্রশ্নটি মোটামুটি, আহ, এলোমেলো, এটি আপনার পক্ষে কাজ করতে পারে:

>>> import uuid
>>> print uuid.uuid4()
58fe9784-f60a-42bc-aa94-eb8f1a7e5c17

6
অনেক ক্ষেত্রে, এলোমেলোভাবে সত্যিই প্রয়োজন হয় না। বরং, আপনার যা প্রয়োজন তা অনন্য।
চেজ সেবার্ট

4
আপনি str(uuid.uuid4())যদি স্ট্রিং হিসাবে এটি ব্যবহার করতে চান তবে আপনি ব্যবহার করতে পারেন।
স্বাগতিকা

4
str(uuid.uuid4()).split("-")[0]আউটপুট:'4bcb6450'
ভ্লাদ গুলিন

ভাল কথা, ভ্লাদ। আর কোনও কিছুর জন্য '' .join (str (uuid.uuid4 ())। বিভাজন ('-') )ও কাজ করে। আউটপুট: '00db8a458c71415c9a263ff08667dd93'
ব্র্যান্ডন

35
>>> import random
>>> import string
>>> s=string.lowercase+string.digits
>>> ''.join(random.sample(s,10))
'jw72qidagk

ঝরঝরে! আমি এখন এটি এলোমেলো পাসওয়ার্ড জেনারেটরের জন্য ব্যবহার করছি! ধন্যবাদ!
চন্ডিস

13
এলোমেলো.সাম্পল গুলি গুলি থেকে স্বতন্ত্র অক্ষরের নমুনা দেবে, অর্থাৎ পাসওয়ার্ডের অক্ষরগুলি কখনও পুনরাবৃত্তি করবে না। এটি গ্রহণযোগ্য উত্তরের মতো এলোমেলো.চয়েস ব্যবহারের চেয়ে যথেষ্ট কম সুরক্ষিত।
নিক জালুটস্কি

4
@ নিকজালুৎসকি: random.choiceনা হয় নিরাপদ। সরাসরি ব্যবহার random.SystemRandom().choice()বা ব্যবহারos.urandom() করুন ।
jfs

4
সতর্কতা! উপরে দুটি মন্তব্য নোট নিন। random.sample অনন্য নমুনা ফেরত দেয় returns অক্ষর পুনরাবৃত্তি হয় না। সুতরাং ফিরে আসা স্ট্রিং কম এলোমেলো। বৃহত্তর স্ট্রিং ত্রুটির জন্য: 'মান মূল্য: জনসংখ্যার চেয়ে বড় নমুনা'।
গেওথে

4
পাইথন 3-তে, lowercaseপ্রতিস্থাপন করা উচিতascii_lowercase
এ্যাটাক

18

মূল প্রশ্নের উত্তর:

os.urandom(n)

থেকে উদ্ধৃতি: http://docs.python.org/2/library/os.html

ক্রিপ্টোগ্রাফিক ব্যবহারের জন্য উপযুক্ত এন এলোমেলো বাইটের একটি স্ট্রিং ফিরিয়ে দিন।

এই ফাংশনটি একটি ওএস-নির্দিষ্ট এলোমেলো উত্স থেকে এলোমেলো বাইটগুলি দেয়। ফিরে আসা ডেটা ক্রিপ্টোগ্রাফিক অ্যাপ্লিকেশনগুলির জন্য পর্যাপ্ত অনুমানযোগ্য হওয়া উচিত, যদিও এর সঠিক গুণমান ওএস প্রয়োগের উপর নির্ভর করে। ইউনিক্স-এর মতো সিস্টেমে এটি / dev / urandom সম্পর্কে জিজ্ঞাসা করবে এবং উইন্ডোজে এটি ক্রিপটেনর্যান্ডম ব্যবহার করবে। যদি কোনও এলোমেলো উত্স না পাওয়া যায় তবে নটমিম্পিমেন্টেড এরির উত্থাপিত হবে।

আপনার প্ল্যাটফর্মের দ্বারা সরবরাহিত এলোমেলো সংখ্যা জেনারেটরের একটি সহজেই ব্যবহারযোগ্য ইন্টারফেসের জন্য, দয়া করে এলোমেলো.সিস্টেমর্যান্ডম দেখুন।


5

আপনি এলোমেলো আসকি অক্ষর তৈরি করতে পারেন যেমন:

import random
print chr(random.randint(0,255))

এবং তারপরে লম্বা স্ট্রিং তৈরি করুন:

len = 50
print ''.join( [chr(random.randint(0,255)) for i in xrange(0,len)] )

4
স্ট্রিং ফর্ম্যাটিং কেন ব্যবহার করবেন? ''.join(map(chr, random.randint(0,256) for _ in xrange(len)))
ক্রিস লুটজ

5

আপনার কী ধরণের র‌্যান্ডম স্ট্রিং দরকার তা আপনি সত্যিই কিছু বলেননি। তবে যে কোনও ক্ষেত্রে, আপনার randomমডিউলটি সন্ধান করা উচিত ।

একটি খুব সহজ সমাধান নীচে আটকানো হয়।

import random

def randstring(length=10):
    valid_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    return ''.join((random.choice(valid_letters) for i in xrange(length)))

print randstring()
print randstring(20)

fyi আপনি আপনার রিটার্ন স্টেটমেন্টে পেরেনসের বাইরেরতম সেটটি বাদ দিতে পারেন।
রবিবার্ষিক

4

কখনও কখনও, আমি আধা-উচ্চারণযোগ্য, আধা স্মরণীয় যে এলোমেলো স্ট্রিংগুলি চেয়েছিলাম।

import random

def randomWord(length=5):
    consonants = "bcdfghjklmnpqrstvwxyz"
    vowels = "aeiou"

    return "".join(random.choice((consonants, vowels)[i%2]) for i in range(length))

তারপরে,

>>> randomWord()
nibit
>>> randomWord()
piber
>>> randomWord(10)
rubirikiro

4-অক্ষরের শব্দ এড়াতে 4 এ সেট করবেন না length

জিম


3
random_name = lambda length: ''.join(random.sample(string.letters, length))

দৈর্ঘ্য হতে হবে <= লেন (স্ট্রিং.লেটারস) = 53. ফলাফল উদাহরণ

   >>> [random_name(x) for x in range(1,20)]
['V', 'Rq', 'YtL', 'AmUF', 'loFdS', 'eNpRFy', 'iWFGtDz', 'ZTNgCvLA', 'fjUDXJvMP', 'EBrPcYKUvZ', 'GmxPKCnbfih', 'nSiNmCRktdWZ', 'VWKSsGwlBeXUr', 'i
stIFGTUlZqnav', 'bqfwgBhyTJMUEzF', 'VLXlPiQnhptZyoHq', 'BXWATvwLCUcVesFfk', 'jLngHmTBtoOSsQlezV', 'JOUhklIwDBMFzrTCPub']
>>> 

উপভোগ করুন। ;)



1

ইন python3.6+আপনি ব্যবহার করতে পারেন secretsমডিউল :

সিক্রেটস মডিউলটি পাসওয়ার্ড, অ্যাকাউন্ট প্রমাণীকরণ, সুরক্ষা টোকেন এবং সম্পর্কিত গোপনীয়তার মতো ডেটা পরিচালনার জন্য উপযুক্ত ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো সংখ্যা তৈরি করতে ব্যবহৃত হয়।

বিশেষত, গোপনীয়তাগুলি এলোমেলো মডিউলে ডিফল্ট সিউডো-র্যান্ডম সংখ্যা জেনারেটরের পছন্দ হিসাবে ব্যবহার করা উচিত, যা সুরক্ষা বা ক্রিপ্টোগ্রাফি নয়, মডেলিং এবং সিমুলেশন জন্য ডিজাইন করা হয়েছে।

768bitসুরক্ষা টোকেন তৈরির পরীক্ষায় আমি পেয়েছি:

  • random.choices()- 0.000246সেকেন্ড
  • secrets.choice()- 0.003529সেকেন্ড

secretsমডিউল ধীর কিন্তু এটা পরীক্ষা বাইরে কি ক্রিপ্টোগ্রাফিক উদ্দেশ্যে ব্যবহার হওয়া উচিত:

import string, secrets

def random_string(size):        
        letters = string.ascii_lowercase+string.ascii_uppercase+string.digits            
        return ''.join(secrets.choice(letters) for i in range(size))

print(random_string(768))

0

এই ফাংশনটি আপনার স্ট্রিং ফর্ম্যাটটি নির্দিষ্ট করার জন্য উপরের, ছোট হাতের অক্ষর, অঙ্কগুলি সমন্বিত, দৈর্ঘ্যের সেপারেটর, no_of_blocks সমন্বয়ে এলোমেলো স্ট্রিং উত্পন্ন করে

উদাহরণস্বরূপ: len_sep = 4, no_of_blocks = 4 নিম্নলিখিত ধরণটি তৈরি করবে,

F4nQ-Vh5z-JKEC-WHUS

যেখানে দৈর্ঘ্যের পৃথককারী 4 - টি অক্ষরের পরে "-" যুক্ত করবে

XXXX-

ব্লকের কোনওটি স্ট্রিং হিসাবে নিম্নের অক্ষরগুলির প্যাটেন তৈরি করবে না

XXXX - XXXX - XXXX - XXXX

যদি একটি একক এলোমেলো স্ট্রিংয়ের প্রয়োজন হয়, তবে এলোমেলো স্ট্রিংয়ের দৈর্ঘ্য নির্দিষ্ট করার জন্য no_of_blocks ভেরিয়েবল 1 এর সমান এবং len_sep রাখুন।

উদাহরণস্বরূপ: len_sep = 10, no_of_blocks = 1, নিম্নলিখিত প্যাটার্নটি উত্পন্ন করবে যেমন। দৈর্ঘ্যের 10 এলোমেলো স্ট্রিং ,

F01xgCdoDU

import random as r

def generate_random_string(len_sep, no_of_blocks):
    random_string = ''
    random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for i in range(0,len_sep*no_of_blocks):
        if i % len_sep == 0 and i != 0:
            random_string += '-'
        random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)])
    return random_string

0
import random 
import string

def get_random_string(size):
    chars = string.ascii_lowercase+string.ascii_uppercase+string.digits
    ''.join(random.choice(chars) for _ in range(size))

print(get_random_string(20)

আউটপুট: FfxjmkyyLG5HvLeRudDS


-1

এলোমেলো আমদানি * থেকে নীচের প্যাকেজটি আমদানি করে দেখুন


এটি প্রশ্নটি মোটেই সমাধান করে না। এই প্যাটার্নটি এলোমেলোভাবে তৈরি করার জন্য আরও ভাল (পাইথোনিক) উপায় আছে
ড্রেকবুর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.