有人能告诉我如何从Python文件中读取随机数行?
答案 0 :(得分:16)
你的要求有点模糊,所以这是另一种略有不同的方法(如果没有其他的灵感):
from random import random
lines = [line for line in open("/some/file") if random() >= .5]
与其他解决方案相比,行的数变化较小(分布在总行数的一半左右),但每行的概率为50%,只有一行通过文件是必需的。
答案 1 :(得分:14)
要从文件中随机获取多行,您可以执行以下操作:
import random
with open('file.txt') as f:
lines = random.sample(f.readlines(),5)
上面的示例返回5行,但您可以轻松地将其更改为您需要的数字。您还可以将其更改为randint()
以获得除随机行数之外的随机数行,但您必须确保样本大小不大于文件中的行数。根据您的输入,这可能是微不足道的或稍微复杂一点。
请注意,这些行可能会以lines
的不同顺序显示在文件中。
答案 2 :(得分:2)
import linecache
import random
import sys
# number of line to get.
NUM_LINES_GET = 5
# Get number of line in the file.
with open('file_name') as f:
number_of_lines = len(f.readlines())
if NUM_LINES_GET > number_of_lines:
print "are you crazy !!!!"
sys.exit(1)
# Choose a random number of a line from the file.
for i in random.sample(range(1, number_of_lines+1), NUM_LINES_GET)
print linecache.getline('file_name', i)
linecache.clearcache()
答案 3 :(得分:0)
import os,random
def getrandfromMem(filename) :
fd = file(filename,'rb')
l = fd.readlines()
pos = random.randint(0,len(l))
fd.close()
return (pos,l[pos])
def getrandomline2(filename) :
filesize = os.stat(filename)[6]
if filesize < 4096 : # Seek may not be very useful
return getrandfromMem(filename)
fd = file(filename,'rb')
for _ in range(10) : # Try 10 times
pos = random.randint(0,filesize)
fd.seek(pos)
fd.readline() # Read and ignore
line = fd.readline()
if line != '' :
break
if line != '' :
return (pos,line)
else :
getrandfromMem(filename)
getrandomline2("shaks12.txt")
答案 4 :(得分:0)
假设偏移始终位于文件的开头:
import random
lines = file('/your/file').read().splitlines()
n_lines = random.randrange(len(lines))
random_lines = lines[:n_lines]
请注意,这会将整个文件读入内存。