Python-为什么我的for循环跳过行而不到达文件末尾?

时间:2019-04-04 10:19:49

标签: python python-3.x for-loop readline

我正在编写一个简单的函数,该函数采用文本文件的路径并返回该文件中包含的行数。

我已经确保使用file.seek(0)将文件指针设置为开头。

def get_number_lines(file_dir):

    exists = os.path.isfile(file_dir) 
    if (exists):
        print(file_dir)
        line_count = 0
        read_file  = open(file_dir,'r')
        read_file.seek(0)
        for line_num, line in enumerate(read_file.readlines()):
            line_count = line_num
            print(line)
        read_file.close()

        return (line_count + 1)
    else:
        print("ERROR: FILE \"" + file_dir + "\" does not exist.")
        exit()

奇怪的是,当我尝试调用该函数时,它运行正常,但是输出告诉我我的文件比实际的短3行。当我打印文件行时,它似乎正在跳过文件的最后3行,我不确定为什么。

2 个答案:

答案 0 :(得分:1)

我已经使用“ with open”而不是read_file.seek测试了以下代码。

个人观点,但对于读取.txt文件效果更好。该函数将返回给定函数路径中找到的行数。如果该文件不存在,则会出错并退出。

def Get_Number_Lines(file_dir):
    exists = os.path.isfile(file_dir) 
    if (exists):
        print(file_dir)
        line_count = 0

        with open(file_dir, 'rb') as fin:

            reader = fin.readlines()

            for line in reader:
                line_count += 1

        return line_count

    else:
        print("ERROR: FILE \"" + file_dir + "\" does not exist.")
        exit()

答案 1 :(得分:0)

赞赏所有建议。所以我发现在调用get_number_lines()函数之前,我已经打开了一个文件对象(处于写模式)。

write_file = open(outputFileDir,"w+")
    # do stuff
get_number_lines(outputFileDir)

然后我尝试在调用函数之前关闭文件,该函数解决了我遇到的问题。出于好奇,我也尝试了一下,但没有问题:

write_file = open(outputFileDir,"w+")
    # do stuff
write_file.close()
read_file.open(outputFileDir,"r")
get_number_lines(outputFileDir)

我没有意识到有两个文件对象(一个读对象,一个写对象)会导致此问题。