• python_random随机


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

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

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

    使用方法: 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
    ')
        #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
    ' % args.input)
        exit(1)
    
    sys.stderr.write('total line number = %d
    ' % 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
    ')
  • 相关阅读:
    使用RPC的接口创建账户同时购买内存并为其抵押CPU和NET资源
    使用RPC的接口创建账户
    【移动安全基础篇】——21、Android脱壳思路
    插件
    NGUI 优化
    影子
    优化文章索引
    MVC
    《你不常用的c#之XX》
    CMake
  • 原文地址:https://www.cnblogs.com/cphmvp/p/4712871.html
Copyright © 2020-2023  润新知