Python:为什么我需要重新打开一个文件才能成功完成这两个操作

Python:为什么我需要重新打开一个文件才能成功完成这两个操作,python,Python,这应该是基本的,但我找不到一个快速的回答我的问题,对不起,如果这是一个双重的 我正在写一个小代码来学习如何操作文件,以及如何计算txt文件中的行数、字数和字符数。 请您解释一下为什么在下面的代码中,如果我没有使用另一个with open()重新加载文件,代码无法正确计算长度(f.read)?没有它,它返回0。 欢迎提出改进准则的意见 def wc(nomFichier): nb_car=0 nb_words=0 nb_lig=0 with open(nomFich

这应该是基本的,但我找不到一个快速的回答我的问题,对不起,如果这是一个双重的

我正在写一个小代码来学习如何操作文件,以及如何计算txt文件中的行数、字数和字符数。 请您解释一下为什么在下面的代码中,如果我没有使用另一个
with open()
重新加载文件,代码无法正确计算
长度(f.read)
?没有它,它返回0。 欢迎提出改进准则的意见

def wc(nomFichier):
    nb_car=0
    nb_words=0
    nb_lig=0
    with open(nomFichier) as f:
        for line in f:
            words = line.split()
            nb_words += len(words)
            nb_lig +=1 
    with open(nomFichier) as f:  #Why I need to reload the file?
        nb_car=len(f.read()) #f.read().stripignore to ignore ligne\n 
    f.close()    
    return (nb_car, nb_words, nb_lig)

您不需要重新打开该文件

def单词计数(文件路径):
计数字符=0
字数=0
计数线=0
打开(文件路径)为f时:
对于f中的行:
计数字符+=len(行)
count_words+=len(line.split())
计数_行+=1
返回(计数字符、计数单词、计数行)

请注意,我将变量名更改为我认为更合适的名称。

f.seek(0)
应该足够了。@bereal提供了一些代码,以便在开始读取之前将文件位置恢复到开头。谢谢@bereal。我应该在哪里使用seek?在任何情况下,我都想遵循python第一门课程给出的方法,seek在这里不起作用。您的选项是
seek
,重新打开,或者将文件读取到变量/列表中,并读取您需要多少次…@AymaneFihadi作为副本链接的问题有解释。每次需要开始读取文件时都调用它。你可以查一下电话号码。