在数据清洗,评估 ,抽验等等过程中,经常有这样的应用场景 :

  需要在一个大的数据集合中随机出来样本,进行人工评估。为了保证足够随机,借助脚本来实现。

下面一个脚本  ,用于应对这种应用场景。

使用方法: python random_select_line.py -h

建议:自定义 alias random  。 使用起来就高效很多

import os, sys, argparse, random;
import subprocess; parser = argparse.ArgumentParser() parser.add_argument('-i', '--input', help = 'input file')
parser.add_argument('-o', '--output', help = 'output file')
parser.add_argument('--stdout', help = 'output to stdout, arg(--output) would be ignore', action = "store_true")
parser.add_argument('-n', '--number', type = int, help = 'number of selected line') args, leftargs = parser.parse_known_args(sys.argv) if (not args.input) or (not args.output) or (not args.number):
sys.stderr.write('wrong argument\n')
#sys.stderr.write(parser)
exit(1) num = -1
try:
rtn_str = subprocess.check_output(['wc', '-l', args.input])
num = (int)(rtn_str.split()[0])
except:
sys.stderr.write('get input_file[%s] line number failed\n' % args.input)
exit(1) sys.stderr.write('total line number = %d\n' % num)
start = min(num, args.number)
reserve_line = range(0, start) for i in xrange(start, num):
m = random.randint(0, i)
if m < start:
reserve_line[m] = i reserve_set = set(reserve_line) ifst = open(args.input, 'r')
if args.stdout:
ofst = sys.stdout
else:
ofst = open(args.output, 'w') i = -1;
for line in ifst:
i += 1
if i in reserve_set:
ofst.write(line) ifst.close()
ofst.close() sys.stderr.write('bye\n')

python_random随机的更多相关文章

  1. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  2. js从数组中随机取出不同的元素

    前言 上午处理个需求需要从一个总数组中随机取出不同的元素.共使用两个方法.第一种方法较常规,经测试有bug,数据量大以后随机几次返回的对象直接是function而不是object. 当然简单数据类型应 ...

  3. 在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功

    前言 上传文件的时候发现总是失败,查看top发现有个进程一直cpu占用80%以上,而且名称还是随机数.kill之后,一会儿又重新生成了.突然发现居然没有在服务端杀毒的经历.在此处补齐. 安装clama ...

  4. 文件随机读写专用类——RandomAccessFile

     RandomAccessFile类可以随机读取文件,但是在测试中并不好用;File类可以测试文件存不存在,不存在可以创建文件;FileWriter类可以对文件进行重写或者追加内容;FileReade ...

  5. TODO:从数据库中随机抽取一条记录

    TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...

  6. scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...

  7. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  8. 从N个元素的集合中随机取m个元素的算法实现

    最近有一个需求,比较简单,就是如标题所说的,从N个元素中随机取m个元素,当然这m个元素是不能存在重复的.本以为这么简单的需求,应该有现成的工具类来实现,但是几次查找居然没找到(有知道的可以推荐下哈^_ ...

  9. 生成随机id对比

    生成随机id 最近公司的项目游戏生成的随机不重复id,重复概率有点大, 代码如下: private static int id = 0; public static int serverID = 0; ...

随机推荐

  1. [LeetCode107]Binary Tree Level Order Traversal II 二叉树层次遍历

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  2. org.apache.jasper.JasperException: An exception occurred processing JSP page /admin/jiaoshi/daochuEx

    org.apache.jasper.JasperException: An exception occurred processing JSP page /admin/jiaoshi/daochuEx ...

  3. T-Sql(一)简单语法

    原文:T-Sql(一)简单语法 Sql Server是鄙人学习的第一种数据库,对Sql Server有一种特别的情感,下面就说一下Sql Server的简单语法,适用初学者. 1,创建数据库creat ...

  4. Android - 分享内容

    Android程序一个很重要地特性是他们可以相互通讯和交互.为什么要重新开发那些不是你程序的核心而且其他程序已经有的功能呢? 这里将要介绍一些使用Intent API和ActionProvider对象 ...

  5. 【C语言探索之旅】 开宗明义及第一课:什么是编程?

    内容简介 1.课程大纲 2.第一部分第一课:什么是编程? 3.第一部分第二课预告:工欲善其事,必先利其器 ​ 课程大纲 不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...

  6. 对比Windows 8模拟器(Simulator)和Windows Phone仿真器(Emulator)

    原文:对比Windows 8模拟器(Simulator)和Windows Phone仿真器(Emulator) 从事移动应用开发,经常会用到模拟器(Simulator)和仿真器(Emulator),本 ...

  7. SAP ABAP规划 SY-REPID与SY-CPROG差额

    首先.它的两个解释   sy-repid is the name of the current program.  "当前程序的程序名                             ...

  8. 使用Python做科学计算初探(转)

    今天在搞定Django框架的blog搭建后,尝试一下python的科学计算能力. python的科学计算有三剑客:numpy,scipy,matplotlib. numpy负责数值计算,矩阵操作等: ...

  9. 股票作手回忆录Digest(转)

    记住,驱动股市的不是理智.逻辑或纯经济因素,驱动股市的是从来不会改变的人的本性.它不会改变,因为它是我们的本性.[4] 在华尔街或在股票投机中,没有什么新的东西.过去发生的事情在将来会一而再,再而三地 ...

  10. bsh for android : 北京

    beanshell : bjtime.bsh source("/sdcard/com.googlecode.bshforandroid/extras/bsh/android.bsh" ...