朋友在ctr工作,苦于各种排期神马的,让我帮他整一个xxxx管理系统

里面在用户管理上面需要有一个批量从文件导入的功能,我肯定不能用汉字来作唯一性约束,于是想到了随机生成.

我首先想到的是直接用itertools和random来'随机'产生一些,够用就OK了,想想其他的也不麻烦,类似微博等的短链生成工具用起来是很方便的,这是背景

割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割

网上搜索了一下相关的实现方法,看到了一个Java版的,这里用Python实现一下.

import uuid

def random_generator1(total=1, length=6):
for i in range(total):
base = list('abcdefghijklmbopqrstuvwxyzABCDEFGHIJKLMBOPQRSTUVWXYZ0123456789')
seed = str(uuid.uuid4()).replace('-', '')
lst = []
for i in range(length):
sub_str = seed[i*4:i*4+4]
x = int(sub_str, 16)
lst.append(base[x % 62])
return ''.join(lst)

将上面的return换成yield,作为一生成器来用也是可以的,这样可以方便的往列表里面插入,

import uuid

def random_generator2(total=1, length=6):
for i in range(total):
base = list('abcdefghijklmbopqrstuvwxyzABCDEFGHIJKLMBOPQRSTUVWXYZ0123456789')
seed = str(uuid.uuid4()).replace('-', '')
lst = []
for i in range(length):
sub_str = seed[i*4:i*4+4]
x = int(sub_str, 16)
lst.append(base[x % 62])
yield ''.join(lst)

本地随便测试了一下,

...

if __name__ == '__main__':
lst = random_generator1(1000000)
print len(set(lst)) # out put 100000

据说Java实现的那位测试了下1000W条数据中也没有出现重复,看起来应该是够用了.

顺便说一下,这里uuid选取uuid4() 生成随机uuid作为种子,其他的几种不太理想,本地测试了一下时间戳方式的uuid1,10W条数据大概会有3W左右的重复,100W的时候重复了大概80W...

所以说,种子很重要啊..

用Python实现的一个简单的随机生成器的更多相关文章

  1. .Net Excel 导出图表Demo(柱状图,多标签页) .net工具类 分享一个简单的随机分红包的实现方式

    .Net Excel 导出图表Demo(柱状图,多标签页) 1 使用插件名称Epplus,多个Sheet页数据应用,Demo为柱状图(Epplus支持多种图表) 2 Epplus 的安装和引用 新建一 ...

  2. python定义的一个简单的shell函数的代码

    把写代码过程中经常用到的一些代码段做个记录,如下代码段是关于python定义的一个简单的shell函数的代码. pipe = subprocess.Popen(cmd, stdout=subproce ...

  3. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  4. Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统

    一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...

  5. Windows 下针对python脚本做一个简单的进程保护

    前提: 大家运行的脚本程序经常会碰到系统异常关闭.或被其他用户错杀的情况.这样就需要一个进程保护的工具. 本文结合windows 的计划任务,实现一个简单的进程保护的功能. 利用py2exe生产 ex ...

  6. Python学习 - 编写一个简单的web框架(二)

    在上一篇日志中已经讨论和实现了根据url执行相应应用,在我阅读了bottle.py官方文档后,按照bottle的设计重写一遍,主要借鉴大牛们的设计思想. 一个bottle.py的简单实例 来看看bot ...

  7. python实现的一个简单的网页爬虫

    学习了下python,看了一个简单的网页爬虫:http://www.cnblogs.com/fnng/p/3576154.html 自己实现了一个简单的网页爬虫,获取豆瓣的最新电影信息. 爬虫主要是获 ...

  8. Python并发编程-一个简单的爬虫

    一个简单的爬虫 #网页状态码 #200 正常 #404 网页找不到 #502 504 import requests from multiprocessing import Pool def get( ...

  9. 一个简单的ruby生成器例子(用连续体Continuation实现)

    ruby中有很多经典的驱动器结构,比如枚举器和生成器等.这次简单介绍下生成器的概念.生成器是按照功能要求,一次产生一个对象,或称之为生成一个对象的方法.ruby中的连续体正好可以用来完成生成器的功能. ...

随机推荐

  1. J2EE之ServletContext读取资源文件

    ServletContext读取资源文件内容的方式有两种: 方法1. public void doGet(HttpServletRequest request, HttpServletResponse ...

  2. C# - 系统类 - Type类

    Type类 ns:System Type类封装类型 它的实例提供一个特定类型的数据和函数成员的信息 可以使用Type类实例来调用类型的成员 一般将Type类用于反射 Type类的静态字段如下 Empt ...

  3. 【转】cocos2d-x 开发中使用的一些工具

    http://k57box.blog.163.com/blog/static/142261374201327112050361/ 这些工具平常也用到,不过没有像这样整理出来,这是我在网上看到的.就记录 ...

  4. Default route and zero route

    A default route of a computer that is participating in computer networking is the packet forwarding ...

  5. How to let gedit of linux display "space"

    gedit--> preference --> check "draw spaces" . Then gedit  will display spaces

  6. semaphore(信号量)使用说明

    例子:      以一个停车场运作为例.为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的.这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待, ...

  7. ReadWriteLock与ReentrantReadWriteLock

    JAVA的JUC包中的锁包括"独占锁"和"共享锁".JUC中的共享锁有:CountDownLatch.CyclicBarrier.Semaphore.Reent ...

  8. JQuery设置input属性(disabled、enabled)

    document.getElementById("removeButton").disabled = false; //普通Js写法 $("#removeButton&q ...

  9. ASP.NET MVC 使用Echarts

    Echarts官网 页面配置: <!DOCTYPE html> <html> <head> <meta name="viewport" c ...

  10. DOS 全集

       DOS全集 winver 检查Windows版本 wmimgmt.msc 打开Windows管理体系结构(wmi) wupdmgr Windows更新程序 wscript Windows脚本宿主 ...