代码之家  ›  专栏  ›  技术社区  ›  Mridang Agarwalla

在Python中从文件中读取一些随机行

  •  7
  • Mridang Agarwalla  · 技术社区  · 14 年前

    有人能告诉我如何用Python从文件中读取随机行数吗?

    5 回复  |  直到 14 年前
        1
  •  16
  •   SimonJ    14 年前

    你的要求有点含糊,所以这里有另一个稍微不同的方法(如果没有其他方法的话,可以给你灵感):

    from random import random
    lines = [line for line in open("/some/file") if random() >= .5]
    

    与其他解决方案相比

        2
  •  15
  •   David Webb    14 年前

    要从文件中随机获取多行,可以执行以下操作:

    import random
    with open('file.txt') as f:
        lines = random.sample(f.readlines(),5)
    

    上面的示例返回5行,但您可以很容易地将其更改为所需的数字。你也可以把它改成 randint() 要获取随机行数和随机行数之外的随机行数,但必须确保样本大小不大于文件中的行数。根据您的输入,这可能是微不足道的,或者更复杂一些。

    lines 以不同的顺序显示在文件中。

        3
  •  2
  •   mouad    14 年前
    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()
    
        4
  •  0
  •   Mazhar Karimi Mazhar Karimi    14 年前
    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")
    
        5
  •  0
  •   Gintautas Miliauskas    14 年前

    假设偏移量始终位于文件的开头:

    import random
    lines = file('/your/file').read().splitlines()
    n_lines = random.randrange(len(lines))
    random_lines = lines[:n_lines]