【问题标题】:Code works outside function, but not inside function (python)代码在函数外部工作,但不在函数内部(python)
【发布时间】:2017-11-13 03:06:27
【问题描述】:

我正在尝试打印文件中的行数,当我在函数之外使用代码时,它可以正常工作:

input_file_name = input("Please Enter the name of your text file: ")
infile = open(input_file_name, "r")

listOfLines = infile.readlines()
count = 0
char = " "

for line in listOfLines :
    text = line.rstrip()
    while char != "":
        char = infile.read(1)
    count = count + 1
print(count)


infile.close()

但是当我在函数内部使用相同的代码时,它会打印一个值 0 而不是 5(这是我的测试文件的长度)。

def main():

    input_file_name = input("Please Enter the name of your text file: ")
    infile = open(input_file_name, "r")
    print()

    print_file(infile)
    count_lines(infile)

    infile.close()


def print_file(infile):
    listOfLines = infile.readlines()
    for line in listOfLines:
        text = line.rstrip()
        print(text)

def count_lines(infile):
    listOfLines = infile.readlines()
    count = 0
    char = " "

    for line in listOfLines :
        text = line.rstrip()
        while char != "":
            char = infile.read(1)
        count = count + 1
    print(count)

main()

但是,如果我删除该功能

def print_file(infile):
listOfLines = infile.readlines()
for line in listOfLines:
    text = line.rstrip()
    print(text)

以及对函数的调用,

print_file(infile)

它工作正常。为什么第一个函数会影响第二个函数的打印方式?

【问题讨论】:

  • 因为print_file 使用了文件,而您没有将流重新设置到开头。
  • 因为第一个函数将文件留在 EOF。所以下一个函数没有什么可读取的。尝试在 count_lines() 方法的开头添加 infile.seek(0) 以将文件重置为其开头。

标签: python function for-loop import


【解决方案1】:

您使用infile = open(input_file_name, "r") 创建的文件对象是一个迭代器。它只能循环一次。

您的print_file 函数对文件执行第一次迭代,耗尽其内容。当您尝试在count_lines 中进行第二次迭代时,迭代器已结束,因此不会发生其他任何事情。

【讨论】:

  • 谢谢,我不知道这个!
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多