如何在python中打印文本文件中的所有行?

时间:2018-08-29 19:34:46

标签: python

我正在尝试以某种格式打印文本文件中的每一行文本,但它仅打印最后一行而不是所有行。 我使用的文本文件有4行,但根据用户的不同,它可能会更少或更多。

我的代码:

def loadrecipefile (recipe_file):
    infile=open(recipe_file)
    Linelist=infile.readlines()
    global cookbook
    for line in Linelist:
        wordList=line.split()
        r1={'apple':int(wordList[1]),'beets':int(wordList[2]),'carrots':int(wordList[3])}
        cookbook={wordList[0]:r1}

def printrecipes():
    for name,ingred in cookbook.items():
        print(name + " " + str(ingred['apple']) + " " + str(ingred['beets']) + " " + str(ingred['carrots']))

因此输入为(以我为例):

loadrecipefile("recipe_file.txt")

printrecipes()

然后它将打印文本文件的每一行,我希望它看起来像这样:

Recipe1 1 4 3

Recipe2 0 2 4

Recipe3 3 0 1

Recipe4 2 1 0

但我只得到最后一行:Recipe4 2 1 0

我不确定如何执行此操作,因为loadrecipefile似乎可以正常工作,但printrecipes没有打印我想要的内容

1 个答案:

答案 0 :(得分:1)

您将在每个循环中覆盖cookbook变量的内容:

cookbook={wordList[0]:r1}

这将执行N次,每次都会创建一个新的带有一个键/值的字典。

您应该在每个循环中将其添加到现有字典中:

cookbook = {}

for ...:
    cookbook[wordList[0]] = r1

现在,您没有要求的部分,但是您应该修复它,因为它看起来很糟糕:不要使用全局变量。什么时候?如果您从不使用它们,那不会错。

不是将结果存储在全局变量中,而是从函数返回结果:

def loadrecipefile(recipe_file):

    ...

    return cookbook

然后,在另一个函数中,获取结果:

    def printrecipes(recipefile):
        cookbook = loadrecipefile(recipefile)
        for name, ingred in cookbook.items():
            ...

或执行以下操作:

    def printrecipes(cookbook):
        for name, ingred in cookbook.items():
            ...

然后:

cookbook = loadrecipefile(recipe_file)
printrecipes(cookbook)