将行放入多个变量(即,不使用f中的行)时如何找到文件的结尾

时间:2019-04-01 16:49:18

标签: python file loops

我想从文件中读取4行,并将每行放在一个单独的变量中。据我所知,我不能使用:

for file in f

因为一次只需要一行,所以我需要将4行放在4个单独的变量中

我当前的“解决方案”如下所示:

while f.readline != None:
            tempName = f.readline()
            print(tempName)
            tempColour = f.readline()
            tempAge = f.readline()
            tempWeight = f.readline()
            # this try is taking the varables and making an object
            try:
                tempSheep = Sheep(tempName, tempColour, int(tempAge), int(tempWeight))
            except:
                print("your file is in an improper format")
                break
            else:
                sheepList.append(tempSheep)

据我所知,问题在于将变量放入对象中。该程序运行良好,然后由于某种原因又要运行额外的时间,在这种情况下,变量不能正确地用兼容的数据类型填充,并且类会引发错误。

最终,我想我的问题是:如何使循环正确退出?

它正在运行超出文件末尾,使变量等于无,然后在创建对象时引发错误。

很抱歉,如果这篇文章比较乱,这是我的第一篇关于堆栈溢出的文章。

2 个答案:

答案 0 :(得分:0)

您可以将文件对象作为可迭代的文件解压缩为4个变量,同时用其余各行重新分配文件变量以进一步解压缩:

with open('input_file') as f:
    lines = f
    while lines:
        try:
            name, colour, age, weight, *lines = lines
            sheepList.append(Sheep(name, colour, int(age), int(weight)))
        except Exception:
            print("your file is in an improper format")
            break

答案 1 :(得分:0)

类似于blhsing指出的那样,您可以这样编写代码:

with open('some_file', 'r') as f:
  tempName = f.readline()
  tempColour = f.readline()
  tempAge = f.readline()
  tempWeight = f.readline()
  # if you want everything else from the file you can do this:
  # rest = f.read()
  # or if you want to continue parsing data line by line, you can do this:
  # for line in f:
  #   process_line(line)

然后可以正常处理变量。如果您担心文件格式不正确,则可以在try / except块中将with包裹起来