标题: [数值计算] [已解决]批处理如何生成1到99999之间的数字? [打印本页]
作者: kkfgef 时间: 2016-2-18 14:57 标题: [已解决]批处理如何生成1到99999之间的数字?
请教如何随机生成1到999999999之间的数字
例如要随机应变生成1至999999999之间的一千万行数字,每一百万枚一个文本
其中每行文本的位都为最大的九位
不足的前面加0:- 123456789
- 987654321
- 000000001
- 000010001
- 098765432
- 100000001
- ………………
复制代码
作者: ivor 时间: 2016-2-18 15:12
本帖最后由 ivor 于 2016-2-18 18:03 编辑
回复 1# kkfgef - @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,10) do (
- for /l %%b in (1,1,1000000) do (
- set ran=!random!!random!!random!!random!
- echo !ran:~-9!
- )
- )>%%a.txt
- pause
复制代码
- # python 3.5.1
- # coding:utf-8
- # 功能:随机9位数字前面补0,无重复
-
- import random, os, time,traceback
-
- start_time = time.time()
- num = list(range(10000000))
- random.shuffle(num)
- a = 1
- wFile = open("%s/%d.txt" % (os.path.split(__file__)[0],a ), 'w')
- print("正在写入第%d个文件" % a)
- try:
- for i in range(len(num)):
- num[i] = "%09d" % num[i]
- if i / 1000000 >= a:
- a += 1
- wFile.close()
- wFile = open("%s/%d.txt" % (os.path.split(__file__)[0], a), 'w')
- print("正在写入第%d个文件" % a)
- wFile.write(num[i] + "\n")
- except:
- traceback.print_exc()
- finally:
- wFile.close()
- print("耗时:%d秒" % (time.time() - start_time))
- input("按回车退出")
复制代码
python 10个文本全部写入耗时39s。
CMD 结果就不发了,需要几分钟
作者: kkfgef 时间: 2016-2-18 16:05
回复 kkfgef python 10个文本全部写入耗时36s。
CMD 结果就不发了,需要几分钟
ivor 发表于 2016-2-18 15:12
python没安装没试过,第一个脚本生成了一万行,有351行重复……
作者: wskwfkbdn 时间: 2016-2-18 16:51
回复 1# kkfgef
目的??意义??
作者: ivor 时间: 2016-2-18 17:22
本帖最后由 ivor 于 2016-2-18 17:25 编辑
回复 3# kkfgef
2楼 python 代码已更新,去除重复结果
作者: bailong360 时间: 2016-2-18 23:03
本帖最后由 bailong360 于 2016-2-19 18:52 编辑
- @shuf -n 10000000 -i 1000000000-2000000000|split -l 1000000
- @sed -i "s/^.//g" x*
复制代码
来个第三方的特技,话说管道传递这么大的数据会不会有点悬...
作者: codegay 时间: 2016-2-18 23:39
回复 6# bailong360
c:\>@shuf -n 10000000 -i 1000000000-2000000000|split -l 1000000 SHUF.txt
shuf: Cannot allocate memory.
split: SHUF.txt: No such file or directory
作者: ivor 时间: 2016-2-19 00:04
本帖最后由 ivor 于 2016-2-19 00:50 编辑
用啥语言,一次性生成10亿个数字都得歇菜,除非分批来解决
考虑用两个数组表示,只是效率不高,但是你想要多大的随机数内存都不是问题
作者: bailong360 时间: 2016-2-19 10:45
本帖最后由 bailong360 于 2016-2-19 10:47 编辑
回复 7# codegay of
嗯...大概需要申请3814M内存
@kkfgef 你家电脑内存多少?
作者: kkfgef 时间: 2016-2-19 11:10
回复 codegay of
嗯...大概需要申请3814M内存
@kkfgef 你家电脑内存多少?
bailong360 发表于 2016-2-19 10:45
4G内存哟
作者: codegay 时间: 2016-2-19 13:19
回复 9# bailong360
一千万行九位数据,TXT大约100M,python一次生成这么多随机数时,进程占用内存是220M-450M左右。使用集合去重处理,内存占用增加到550M,发现每一千万随机数,大约只有五万个是重复的。
另外我电脑可用内存在6-8G时运行你的批处理也是报和上面一样的错误。- """
- 如何随机生成1到999999999之间的数字.py
- http://bbs.bathome.net/thread-39410-1-1.html
- 2016年2月19日 01:56:51 codegay
- """
-
- import time
- import random
- start=time.time()
- print("运行中..."*3)
-
- txt={str(random.randint(1000000001,2000000000))[1:]+"\n" for r in range(10000000)}#集合解析生成一千万随机数并去重。会导致比列表解析慢上7秒左右。运行耗时: 44
- print(len(txt))
- with open("sj.txt","a+") as f:
- f.writelines(txt)
-
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
复制代码
作者: bailong360 时间: 2016-2-19 19:26
回复 11# codegay
python果然强悍- #lang racket
-
- (require 2htdp/batch-io)
- (letrec ([main (lambda (l t)
- (when (<= 10 t)
- (printf "writing file ~v.txt~n" t)
- (call-with-output-file (string-append (number->string t) ".txt")
- (lambda (output-port)
- (for-each (lambda (x)
- (fprintf output-port "~a~n" (substring (number->string x) 1)))
- (take l 1000000))))
- (main (drop l 1000000) (+ t 1))))])
- (main (shuffle (range 1000000000 2000000000)) 1))
复制代码
哎,来个racket的练练手算了,速度有够慢... 这语言果然不适合干这些事儿....得找门简单实用的语言学一学了
作者: codegay 时间: 2016-2-19 19:41
回复 12# bailong360
感觉是你写错了啊。range那不是要生成十亿个数字再shufle乱序?这样估计是会很慢。
作者: codegay 时间: 2016-2-19 19:44
回复 12# bailong360
虽然我也没有写什么正式的作品,但是一想到python打包成EXE,要有好几M大。也是感觉到蛋疼。
作者: bailong360 时间: 2016-2-19 20:23
回复 13# codegay
嗯..我就是这么干的...
感觉想不到什么好方法
作者: codegay 时间: 2016-2-19 20:43
回复 15# bailong360
明明可以random的.
作者: codegay 时间: 2016-2-19 20:48
怪不得需要4G左右的内存。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |