代码在函数外部工作,但在函数内部不工作(python)

代码在函数外部工作,但在函数内部不工作(python),python,function,for-loop,import,Python,Function,For Loop,Import,我试图打印文件中的行数,当我在函数外使用代码时,它工作正常: 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() whi

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

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 print_file(infile):
listOfLines = infile.readlines()
for line in listOfLines:
    text = line.rstrip()
    print(text)
以及对函数的调用

print_file(infile)

它很好用。为什么第一个函数会影响第二个函数的打印方式?

使用
infle=open(input\u file\u name,“r”)创建的文件对象是一个迭代器。它只能循环一次


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

因为
print\u file
会使用文件,而您不会将流重置回起始位置。因为第一个函数会在EOF处离开文件。因此,下一个函数没有要读取的内容。尝试在count\u lines()方法的开始处添加
infle.seek(0)
,以将文件重置为其开始位置。可能重复感谢,我不知道这一点!
print_file(infile)