我想拉出列表元素数量随机范围(从5到15)。 例如, 我的文字包含以下字符串
locasari2
jyprin
a0007a
hdki22
binarykorea
onlineforum
vobank1
chsb4322
gaiber62
wjun2104
inaekkim
zcbm22
happy_sex
ckdgns0524
lhe0925
chong4787
multy26
ver_test
danaecco
paoo
kea2209
ybyng234
smrush
kimksh2596
winproto
cs8489
aek5262
bktan12
puripink04
qkdlfjf99
nyj4154
joara5778
keepro
sswpsh72
tom770303
ckdanrl0757
himart26
lco3924
heloword
jking15
我想从5到15中随机提取一个元素列表,这样我想得到的结果 是,
locasari2,jyprin,a0007a,hdki22,binarykorea
onlineforum,vobank1,chsb4322,gaiber62,wjun2104,inaekkim,zcbm22
ckdgns0524,lhe0925,chong4787,multy26,ver_test,danaecco
paoo,kea2209,ybyng234,smrush,kimksh2596,winproto,cs8489,aek5262,bktan12,puripink04,qkdlfjf99,nyj4154
joara5778,keepro,sswpsh72,tom770303,ckdanrl0757,himart26,lco3924,heloword
这是我到目前为止所做的,但问题之一有时可以正确提取数量元素,但有时提取数据超过15个字
out = ''
handle = open('fx -01.txt').read()
for i, line in enumerate(handle.split('\n')):
out += line + ','
rndind = random.randint(5,15)
if (i + 1) % rndind == 0 :
out = out.split(',')
print len(out)
print out
out = ''
抱歉我的英语不好。
答案 0 :(得分:1)
使用itertools.islice
,您无需阅读整个文件。
import itertools
import random
with open('fx-01.txt') as f:
while True:
n = random.randint(5, 15)
elements = [line.strip() for line in itertools.islice(f, n)]
# itertools.islice(f, n): to fetch `n` lines from file.
if not elements:
# if len(elements) < 5: # Use this if you want drop trailing <5 lines.
break
print(','.join(elements))
答案 1 :(得分:0)
您想要使用上下文管理器。
为了循环这个,让我们假设你正在处理一个小的结果列表(尽管文件可能很大),并且选择列表的内存不是问题,我们将首先收集列表中的项目然后循环选择其中的项目。
import random
choice_list = []
with open('fx -01.txt', 'rU') as handle:
first = 5
last = 15
for i in xrange(last):
selection = handle.next()
if first <= i <= last:
choice_list.append(selection)
number_of_random_choices = 10
for i in xrange(number_of_random_choices):
print random.choice(choice_list)
上下文管理器可确保您在出现错误时自动关闭文件,因此您不会将文件锁定为打开状态。
open
为您提供了一个迭代器,模式标志中的U
(对于Universal)确保您可以在新行上拆分,无论您的平台,Windows还是Unix。
然后我们避免将整个文件甚至迭代器实现到内存中的列表中,并选择我们想要随机选择的列表。展示了10次循环。每个选择将独立于前一个,这意味着每个选择可以多次选择。
将它们全部放在随机位置,即随机抽取它们:
random.shuffle(choice_list)
print choice_list
会给你一张随机洗牌的清单。