Generating random text strings of a given pattern

前端 未结 5 722
野性不改
野性不改 2020-12-08 07:40

I need to generate random text strings of a particular format. Would like some ideas so that I can code it up in Python. The format is <8 digit number><15 character st

相关标签:
5条回答
  • 2020-12-08 08:12

    Here's a simpler version:

    import random
    import string
    
    digits = "".join( [random.choice(string.digits+string.letters) for i in   xrange(10)] )
    print digits
    
    0 讨论(0)
  • 2020-12-08 08:18

    random.sample is an alternative choice. The difference, as can be found in the python.org documentation, is that random.sample samples without replacement. Thus, random.sample(string.letters, 53) would result in a ValueError. Then if you wanted to generate your random string of eight digits and fifteen characters, you would write

    import random, string
    
    digits = ''.join(random.sample(string.digits, 8))
    chars = ''.join(random.sample(string.letters, 15))
    
    0 讨论(0)
  • 2020-12-08 08:21

    Shorter version since python 3.6.2, with random.choices over random.choice which doesn't need a for loop, but instead just pass k, the length of the random string required.

    import random
    import string
    x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
    print(x)
    

    You can also add string.punctuation if you need string with punctuation characters.

    0 讨论(0)
  • 2020-12-08 08:23
    #!/usr/bin/python
    
    import random
    import string
    
    digits = "".join( [random.choice(string.digits) for i in xrange(8)] )
    chars = "".join( [random.choice(string.letters) for i in xrange(15)] )
    print digits + chars
    

    EDIT: liked the idea of using random.choice better than randint() so I've updated the code to reflect that.

    Note: this assumes lowercase and uppercase characters are desired. If lowercase only then change the second list comprehension to read:

    chars = "".join( [random.choice(string.letters[:26]) for i in xrange(15)] )
    

    Obviously for uppercase only you can just flip that around so the slice is [26:] instead of the other way around.

    0 讨论(0)
  • 2020-12-08 08:25

    See an example - Recipe 59873: Random Password Generation .

    Building on the recipe, here is a solution to your question :

    from random import choice
    import string
    
    def GenPasswd2(length=8, chars=string.letters + string.digits):
        return ''.join([choice(chars) for i in range(length)])
    
    >>> GenPasswd2(8,string.digits) + GenPasswd2(15,string.ascii_letters)
    '28605495YHlCJfMKpRPGyAw'
    >>> 
    
    0 讨论(0)
提交回复
热议问题