无法为while循环找到正确的变量

时间:2017-10-31 18:46:05

标签: python while-loop sentinel

所以即时寻找正确的变量,一旦循环到达文件的末尾,它将结束while循环。到目前为止,这是我的代码:

file_name = input("Please enter file name: ")

open_file = open(file_name,"r")

while ##variable## != "":
    line1 = open_file.readline()
    line2 = open_file.readline()
    line3 = open_file.readline()
    line4 = open_file.readline()

让我们说我打开的文件看起来像这样:

Babbage, Charles
10.0   9.5    8.0  10.0
 9.5  10.0    9.0
85.0  92.0   81.0
Turing, Alan
10.0   8.0    6.0
10.0  10.0    9.0   9.5
90.0  92.0   88.5
Hopper, Grace
10.0  10.0    8.0
10.0  10.0    9.0   9.5
90.0  92.0   88.0

我需要循环在读取最后一行时结束,继承一些伪代码:

#Get first data
#while data is not sentinel
    #process the data
    #
    #
    #
    #
    #Get next data

希望这清楚,我感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

改为使用for循环:

for line in open_file:
    #do stuff
    print(line)

来自教程 - Reading and Writing Files

如果您被迫使用while循环:
readline将在到达文件末尾时返回一个空字符串,这样您就可以将sentinel设为空字符串。

sentinel = ''

在while循环之前读取一行

line = open_file.readline()

在while循环条件中使用line

while line != sentinel:

在循环的底部,读取另一行。

即使文件中可能有空行,这些行仍应包含行尾字符,如"\n",因此它不会是空字符串

答案 1 :(得分:0)

如上所述,for循环是从文件中读取的最简单,最好的方法。与Java或C不同的是,您可以轻松地为while循环创建条件,只有在仍有内容要从文件中读取时才会保持为真,因此在Python中执行此操作更为尴尬。

Python中的文件公开了一个迭代器,因此您可以使用for循环迭代它们(最自然)。您也可以使用内置的next()方法:

--wrap=mangled-foo

答案 2 :(得分:0)

当然这不是最佳选择,但使用while循环使用comments中的函数:

def file_len(fname):
with open(fname) as f:
    for i, l in enumerate(f):
        pass
return i + 1



file_name = input("Please enter file name: ")

numOfLines = file_len(file_name)
open_file = open(file_name,"r")

count = 0
while count != numOfLines:
    #enter code here
    count += 1