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

Flask不同路由读写同一文件数据不一致问题求解

问题原因

  • 你使用相对路径读取/写入file.txt,当Flask运行在多线程/多进程模式(包括默认开启的调试重载模式)下,不同进程的工作目录可能不一致,导致写入和读取的不是同一个文件
  • 文件操作未显式指定编码,不同系统的默认编码差异会导致读写内容出现乱码,看起来和写入内容不一致
  • r+配合truncate的写入方式不够稳妥,容易因为文件指针位置异常出现内容残留

修复方案

  1. 固定file.txt的绝对路径,确保读写的是同一个文件
  2. 替换写入逻辑为w模式打开文件,自动清空原有内容,无需手动调用truncate
  3. 所有文件操作都显式指定编码为utf-8,避免编码乱码问题
  4. 若使用调试模式,添加use_reloader=False参数关闭重载进程,避免多进程导致的路径不一致问题

修复后代码示例

前置路径配置

import os
# 提前定义file.txt的绝对路径,基于当前py文件所在目录生成
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
FILE_PATH = os.path.join(BASE_DIR, "file.txt")

根路由写入逻辑

#default page of our web-app
@app.route('/',methods=['GET','POST'])
def home():
    if request.method == "POST":
        date = request.form["date"]
        region =request.form["region"]
        print("REGION:HOME",region)
        # 用w模式打开自动清空原有内容,显式指定utf-8编码,with语法自动处理文件关闭
        with open(FILE_PATH, "w", encoding="utf-8") as f:
            f.write(region)
    return render_template("index.html")

/download路由读取逻辑

@app.route('/download')
def download_file():
    '''
    处理文件下载请求
    '''
    # 用相同的绝对路径读取,指定utf-8编码
    with open(FILE_PATH, "r", encoding="utf-8") as f:
        reg = f.read()
    print("REGION:DOWNLOAD" ,reg)
    p = "download.csv"
    # 如果download.csv也出现路径问题,可以用和FILE_PATH相同的逻辑生成绝对路径
    return send_file(p,as_attachment=True)

启动代码调整(仅开启调试模式时需要)

if __name__ == '__main__':
    # 关闭重载器避免多进程读写异常
    app.run(debug=True, use_reloader=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:54:00