码迷,mamicode.com
首页 > 编程语言 > 详细

python_random随机

时间:2015-08-08 14:47:58      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

使用方法: 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随机

标签:

原文地址:http://www.cnblogs.com/cphmvp/p/4712871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!