在python中,如何将文件中的随机行放入字符串中?
我想做的是编写一个有文件的代码(在代码中,用户无需输入),代码从文件中随机选取一行-不管是什么,一个长行,一个ip,甚至一个单词,然后在循环结束时将其放入字符串中,以便我可以在代码的其他部分使用它 我尝试使用在python中,如何将文件中的随机行放入字符串中?,python,Python,我想做的是编写一个有文件的代码(在代码中,用户无需输入),代码从文件中随机选取一行-不管是什么,一个长行,一个ip,甚至一个单词,然后在循环结束时将其放入字符串中,以便我可以在代码的其他部分使用它 我尝试使用randomchoice(lines),但不确定如何从这里继续。 之后,我尝试使用: import random def random_line(afile): line = next(afile) for num, aline in enumerate(afile):
randomchoice(lines)
,但不确定如何从这里继续。
之后,我尝试使用:
import random
def random_line(afile):
line = next(afile)
for num, aline in enumerate(afile):
if random.randrange(num + 2): continue
line = aline
return line
这也因为某种原因对我不起作用。你发布的上一个方法对我起作用。可能您没有正确打开文件。下面是另一种方法,使用
random.choice
import random
def random_line(f):
return random.choice([line for line in f])
f = open("sample.txt", 'r')
print random_line(f)
编辑:
另一种方式是(感谢@zhangxaochen):
你发布的最后一个方法对我有效。可能您没有正确打开文件。下面是另一种方法,使用
random.choice
import random
def random_line(f):
return random.choice([line for line in f])
f = open("sample.txt", 'r')
print random_line(f)
编辑:
另一种方式是(感谢@zhangxaochen):
你发布的最后一个方法对我有效。可能您没有正确打开文件。下面是另一种方法,使用
random.choice
import random
def random_line(f):
return random.choice([line for line in f])
f = open("sample.txt", 'r')
print random_line(f)
编辑:
另一种方式是(感谢@zhangxaochen):
你发布的最后一个方法对我有效。可能您没有正确打开文件。下面是另一种方法,使用
random.choice
import random
def random_line(f):
return random.choice([line for line in f])
f = open("sample.txt", 'r')
print random_line(f)
编辑:
另一种方式是(感谢@zhangxaochen):
从C翻译:
编辑:这似乎与random.choice执行相同的操作。我想知道他们是否使用相同的算法
编辑2:从注释和一些实验来看,它似乎是随机的。choice
使用了不同的算法,如果所有元素都已在内存中,则该算法将更加有效。除非使用readlines
,否则文件通常不会出现这种情况。在必须将整个文件保存在内存中与必须计算n
随机数之间需要权衡。从C转换为:
编辑:这似乎与random.choice执行相同的操作。我想知道他们是否使用相同的算法
编辑2:从注释和一些实验来看,它似乎是随机的。choice
使用了不同的算法,如果所有元素都已在内存中,则该算法将更加有效。除非使用readlines
,否则文件通常不会出现这种情况。在必须将整个文件保存在内存中与必须计算n
随机数之间需要权衡。从C转换为:
编辑:这似乎与random.choice执行相同的操作。我想知道他们是否使用相同的算法
编辑2:从注释和一些实验来看,它似乎是随机的。choice
使用了不同的算法,如果所有元素都已在内存中,则该算法将更加有效。除非使用readlines
,否则文件通常不会出现这种情况。在必须将整个文件保存在内存中与必须计算n
随机数之间需要权衡。从C转换为:
编辑:这似乎与random.choice执行相同的操作。我想知道他们是否使用相同的算法
编辑2:从注释和一些实验来看,它似乎是随机的。choice
使用了不同的算法,如果所有元素都已在内存中,则该算法将更加有效。除非使用readlines
,否则文件通常不会出现这种情况。在必须将整个文件保存在内存中与必须计算n
随机数之间会有一个折衷。当你说你显示的代码不工作时,你是什么意思?它是否引发了一个例外?还垃圾?始终返回相同的内容?文件名是filename还是filehandle?如果我理解正确,行
是应该获得随机行值的字符串,但由于某种原因它不会。不知道我做错了什么当你说你展示的代码不起作用时,你是什么意思?它是否引发了一个例外?还垃圾?始终返回相同的内容?文件名是filename还是filehandle?如果我理解正确,行
是应该获得随机行值的字符串,但由于某种原因它不会。不知道我做错了什么当你说你展示的代码不起作用时,你是什么意思?它是否引发了一个例外?还垃圾?始终返回相同的内容?文件名是filename还是filehandle?如果我理解正确,行
是应该获得随机行值的字符串,但由于某种原因它不会。不知道我做错了什么当你说你展示的代码不起作用时,你是什么意思?它是否引发了一个例外?还垃圾?始终返回相同的内容?文件名是filename还是filehandle?如果我理解正确,行
是应该获得随机行值的字符串,但由于某种原因它不会。不知道我做错了什么短,但是如果文件很大的话会很贵。它会立即被读取到内存中。@senshin+1应该是a文件
,而不是f
正常,因此我可能无法正确打开文件。为什么要在随机行之后打开文件?def random\u line(f)
只是方法的声明,没有问题。请注意,在调用print语句中的random\u line(f)
之前,我正在打开文件。好的!现在,它的工作,我不知道我做错了什么,但这是非常简单的,谢谢大家!短,但如果文件很大,则成本较高。它会立即被读取到内存中。@senshin+1应该是a文件
,而不是f
正常,因此我可能无法正确打开文件。为什么要在随机行之后打开文件?def random\u line(f)
只是方法的声明,没有问题。注意,我在调用rand之前打开了文件