2014-10-06 183 views
0

我必须创建一个从python中的文本文件读取随机行的函数。从文本文件中随机读取一行的函数

我有下面的代码,但我无法得到它的工作

import random 

def randomLine(filename): 
    #Retrieve a random line from a file, reading through the file irrespective of the length 
    fh = open(filename.txt, "r") 
    lineNum = 0 
    it = '' 

    while 1: 
     aLine = fh.readline() 
     lineNum = lineNum + 1 
     if aLine != "": 

      # How likely is it that this is the last line of the file ? 
      if random.uniform(0,lineNum)<1: 
       it = aLine 
     else: 
      break 

    fh.close() 

    return it 
print(randomLine(testfile.txt)) 

我走到这一步,但是,需要帮助走得更远,请帮

一旦程序运行我” m得到错误说

print(randomLine(testfile.txt)) 
NameError: name 'testfile' is not defined 
+0

您目前遇到的错误或问题是什么? – OregonTrail 2014-10-06 02:55:18

+0

什么是错误?请将堆栈跟踪粘贴到您的问题中。 – OregonTrail 2014-10-06 02:58:12

+1

'print(randomLine(testfile.txt))'你需要''testfile.txt'周围的引号,以便它变成一个字符串。 – 2014-10-06 03:01:52

回答

0

这是一个已经过测试的版本,可以避免空行。

为清楚起见,变量名称是详细的。

import random 
import sys 

def random_line(file_handle): 
    lines = file_handle.readlines() 
    num_lines = len(lines) 

    random_line = None 
    while not random_line: 
     random_line_num = random.randint(0, num_lines - 1) 
     random_line = lines[random_line_num] 
     random_line = random_line.strip() 

    return random_line 

file_handle = None 

if len(sys.argv) < 2: 
    sys.stderr.write("Reading stdin\n") 
    file_handle = sys.stdin 
else: 
    file_handle = open(sys.argv[1]) 

print(random_line(file_handle)) 

file_handle.close()