You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中读取新建空文件最后一行报错,如何解决?

问题分析与解决

核心问题

你的代码存在两个关键错误:

  1. w+模式误用:用w+打开文件时,无论文件是否存在,都会先清空原有内容(不存在则创建空文件)。新创建的空文件调用readlines()会返回空列表,此时取[-1]必然触发IndexError。
  2. 逻辑矛盾:就算文件原本存在,w+会先清空内容,你根本读不到原来的最后一行。

修正方案

正确思路是:先尝试读取文件(只读模式),若文件不存在则创建并写入初始内容;若文件存在,再读取最后一行做判断。

方案一:捕获文件不存在异常(推荐)

HIGH_SCORES_FILE_PATH = "your_file_path.txt"

try:
    # 先尝试读取文件
    with open(HIGH_SCORES_FILE_PATH, "r") as file:
        lines = file.readlines()
        # 处理空文件情况
        last_line = lines[-1] if lines else ""
        
        if last_line == '\n' or not last_line:
            # 追加写入初始内容
            with open(HIGH_SCORES_FILE_PATH, 'a') as file:
                file.write('Jogo:\n')
                file.write(f'{0}\n')
except FileNotFoundError:
    # 文件不存在时直接创建并写入初始内容
    with open(HIGH_SCORES_FILE_PATH, "w") as file:
        file.write('Jogo:\n')
        file.write(f'{0}\n')

方案二:先检查文件是否存在

import os

HIGH_SCORES_FILE_PATH = "your_file_path.txt"

if os.path.exists(HIGH_SCORES_FILE_PATH):
    with open(HIGH_SCORES_FILE_PATH, "r") as file:
        lines = file.readlines()
        last_line = lines[-1] if lines else ""
        
        if last_line == '\n' or not last_line:
            with open(HIGH_SCORES_FILE_PATH, 'a') as file:
                file.write('Jogo:\n')
                file.write(f'{0}\n')
else:
    with open(HIGH_SCORES_FILE_PATH, "w") as file:
        file.write('Jogo:\n')
        file.write(f'{0}\n')

额外优化:高效读取最后一行

如果文件很大,readlines()会加载整个文件到内存,效率极低,可改用以下方式只读取最后一行:

import os

def get_last_line(file_path):
    with open(file_path, "rb") as file:
        # 从文件末尾倒读
        file.seek(-2, os.SEEK_END)
        while file.read(1) != b'\n':
            try:
                file.seek(-2, os.SEEK_CUR)
            except OSError:
                file.seek(0)
                break
        last_line = file.readline().decode('utf-8')
    return last_line

用这个函数替代readlines()[-1],能避免大文件占用过多内存。

内容的提问来源于stack exchange,提问作者migas_silverio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:45:19