代码无法读取同目录下corpus.txt文件,报错FileNotFoundError
解决FileNotFoundError及文件读写异常问题
核心问题分析
文件打开模式错误:
默认open('corpus.txt')采用只读模式('r'),若目标文件不存在会直接抛出FileNotFoundError;且只读模式下调用write()会触发IO错误,完全不符合「读取旧内容+追加新内容」的需求。工作目录与脚本目录不匹配:
你认定的「同目录」可能并非程序实际运行的工作目录。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
相关产品推荐
相关产品推荐

