朋友在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. libpcre.so.1 cannot be found

    安装完Nginx之后,启动报错. [vagrant@localhost sbin]$ sudo ./nginx ./nginx: error while loading shared librarie ...

  2. Android - Shared Preference (分享首选项) 具体解释

    Shared Preference (分享首选项) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24454963 Sh ...

  3. CenOS搭建FTP服务器

    CenOS搭建FTP服务器 -------------------------------------------------------------------------准备工作--------- ...

  4. [Javascript] Fetch API

    fetch() does the same thing as XHR, but fetch return a promise. fetch('password.txt', { 'method': 'P ...

  5. C#高级编程四十九天----队列

    队列 1.Queue定义 System.Collections.Queue类表示对象的先进先出集合,存储在Queue(队列)中的对象在一端插入,从还有一端移除. 2.长处 (1).能对集合进行顺序处理 ...

  6. APUE习题5.x

    5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时出错,解释问题所在? #include <stdio.h> int main( void ) { char c; while( ...

  7. C# - 系统类 - DateTime类

    DateTime类 ns:System 此类是一个结构 提供了访问和修改它所代表的时间 创建DateTime实例的几种方式 DateTime time = , , , , , ); Console.W ...

  8. Android 开发第二天

    开发入门HelloWorld 首先打开开发工具 第一步 第二步 效果图 以后可以点击一直下去 第三步骤介绍一下里面项目的作用 SRC是用来保存源代码的东西MainAcrivity.java主视图res ...

  9. (整理)FORM:Oracle EBS客制化Form的菜单栏用法说明

    用户最多可以定义45个form-level的trigger,名称必须为SPECIALn, 其中SPECIAL1 to SPECIAL15属于Tools菜单项,放在“工具”主菜单下. SPECIAL16 ...

  10. js选中checkbox赋值给文本框

    //js $(function(){ var name=""; var kmname=[]; var n= $("input[type=checkbox]"). ...