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

代码无法读取同目录下corpus.txt文件,报错FileNotFoundError

解决FileNotFoundError及文件读写异常问题

核心问题分析

  1. 文件打开模式错误:
    默认open('corpus.txt')采用只读模式('r'),若目标文件不存在会直接抛出FileNotFoundError;且只读模式下调用write()会触发IO错误,完全不符合「读取旧内容+追加新内容」的需求。

  2. 工作目录与脚本目录不匹配:
    你认定的「同目录」可能并非程序实际运行的工作目录。Python默认以启动脚本时的终端/IDE工作路径为当前工作目录,而非脚本文件所在路径。


解决方案及修正代码

步骤1:确认实际工作目录(可选但建议)

先打印当前工作目录,验证是否和脚本所在目录一致:

import os
print(os.getcwd())

步骤2:修正后的完整函数

import os

def write_doc(text):
    # 获取脚本文件的绝对目录路径
    script_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接corpus.txt的绝对路径,确保指向脚本同目录下的文件
    file_path = os.path.join(script_dir, 'corpus.txt')
    
    # 使用a+模式打开:支持读取、追加写入,文件不存在则自动创建
    with open(file_path, 'a+', encoding='utf-8') as file:
        # a+模式打开后文件指针在末尾,需移到开头才能读取已有内容
        file.seek(0)
        existing_content = file.read()
        
        # 移回文件末尾,避免覆盖原有内容
        file.seek(0, os.SEEK_END)
        # 若文件为空则直接写入文本,否则先加空行再写入
        if existing_content:
            file.write(f'\n\n{text}')
        else:
            file.write(text)

关键细节说明

  • with语句:自动管理文件句柄,无需手动调用close(),避免因忘记关闭导致的资源泄漏。
  • a+模式:兼顾「读取已有内容」和「追加新内容」的需求,且文件不存在时会自动创建,从根源避免FileNotFoundError。
  • 绝对路径拼接:通过os.path模块获取脚本目录并拼接文件路径,彻底解决工作目录不一致的问题。
  • 编码指定:添加encoding='utf-8'确保跨系统的编码兼容性,避免乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:15:06