当前位置: 首页 > 面试题库 >

如何从一个文件读取随机行?

姬英武
2023-03-14
问题内容

有内置的方法吗?如果没有,我该怎么做而又不会花费太多的开销?


问题答案:

不是内置的,但是R(3.4.2)Knuth的“计算机编程的艺术”中的算法(Waterman的“ Reservoir
Algorithm”)很好(在非常简化的版本中):

import random

def random_line(afile):
    line = next(afile)
    for num, aline in enumerate(afile, 2):
      if random.randrange(num): continue
      line = aline
    return line

所述num, ... in enumerate(..., 2)迭代器产生的序列2,3,4
…的randrange因此将0的概率为1.0/num-这与我们必须替换当前选定的行(被引用的算法的样本大小1的特殊情况的概率-
有关正确性==的信息,请参阅Knuth的书,当然,我们还需要足够小的“存储库”来存储内存;-))…以及我们 这样做的 确切概率。



 类似资料:
  • 本文向大家介绍php从文件夹随机读取文件的方法,包括了php从文件夹随机读取文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php从文件夹随机读取文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 主要内容:文件定位函数rewind和fseek,文件的随机读写前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置 指针,再进行读写。这种读写方式称为 随机读写,也就是说从文件的任意位置开始读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。 文件定位函数rewind和fseek 移动文件内部位置指针的函数主要有两个,即 rewind(

  • 我想逐行读取一个文件,但不完全加载到内存中。 我的文件太大,无法在内存中打开,如果尝试这样做,我总是会出现内存错误。 文件大小为1 GB。

  • 问题内容: 我有一个很大的CSV文件(15 Gb),我需要从中读取大约一百万行。据我所见-并实现-Python中的CSV实用程序仅允许在文件中顺序迭代。 将所有文件读入内存以使用一些随机选择非常耗费内存,并且遍历所有文件并丢弃一些值并选择其他值非常耗时,因此, 无论如何 , 是否有必要从CSV文件中选择一些随机行,只读那行? 我尝试没有成功: CSV文件示例: 问题答案: 正如@AndreBoos

  • 问题内容: 我想一次从文件中读取一个数字列表作为一个字符,一次检查一个字符,以检查该字符是什么,是否是数字,句点,+或-,e或E或其他一些字符。 ..然后基于此执行我想要的任何操作。如何使用已有的现有代码执行此操作?这是我尝试过的示例,但是没有用。我是python的新手。提前致谢! 问题答案: 从文件中读取行。以文本块的形式读取整个文件,然后遍历文本的每个字符:

  • 问题内容: 我在JAR文件中有一个文件。这,例如。 我该如何访问?我的源代码是: 问题答案: 您不能使用File,因为此文件在文件系统上并不独立存在。相反,您需要getResourceAsStream(),如下所示: