在python中,如何将文件中的随机行放入字符串中?

在python中,如何将文件中的随机行放入字符串中?,python,Python,我想做的是编写一个有文件的代码(在代码中,用户无需输入),代码从文件中随机选取一行-不管是什么,一个长行,一个ip,甚至一个单词,然后在循环结束时将其放入字符串中,以便我可以在代码的其他部分使用它 我尝试使用randomchoice(lines),但不确定如何从这里继续。 之后,我尝试使用: import random def random_line(afile): line = next(afile) for num, aline in enumerate(afile):

我想做的是编写一个有文件的代码(在代码中,用户无需输入),代码从文件中随机选取一行-不管是什么,一个长行,一个ip,甚至一个单词,然后在循环结束时将其放入字符串中,以便我可以在代码的其他部分使用它

我尝试使用
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之前打开了文件