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

Flask项目无法定位CSV文件路径,如何在HTML展示CSV数据?

Flask读取CSV文件路径错误问题解决

问题背景

编写Python爬虫生成了exports-imports.csv文件,想通过Flask在HTML页面展示内容,但with open始终找不到文件路径,即使移动文件位置也无效,Ctrl+右键能定位文件但程序不行,希望不使用pandas等库解决。

项目结构

├── main.py
├── scraping
│   ├── exports-imports.csv
├── website
│   ├── __init__.py
│   ├── templates
│   │   ├── datas.html
│   └── datas.py

现有代码

main.py

from website import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True, port=9000)

init.py

from flask import Flask

def create_app():
    app = Flask(__name__)

    app.debug = True

    from .datas import datas

    app.register_blueprint(datas, url_prefix='/')

    return app

datas.html

<table>
    <tr>
        <thead>
        <th>Year</th>
        <th>Exports</th>
        <th>Imports</th>
        </thead>
    </tr>
    {% for row in data %}
    <tr>
        <td>{{ row[0] }}</td>
        <td>{{ row[1] }}</td>
        <td>{{ row[2] }}</td>
    </tr>
    {% endfor %}
</table>

exports-imports.csv

1964;33193;30084
1965;36635;36019
1966;41224;37156
1967;44505;35884
1968;50900;41506
1969;58061;50092

datas.py

from flask import Blueprint, render_template
import csv

datas = Blueprint('datas', __name__)


@datas.route('/datas')
def show_data():
    try:
        data = []
        with open('../scraping/exports-imports.csv', 'r') as f:
            reader = csv.reader(f)
            for row in reader:
                data.append(row)
        return render_template('datas.html', data=data)
    except FileNotFoundError:
        return "Error: file not found"

解决方案

问题核心是相对路径的基准目录错误:Flask运行时的工作目录是启动main.py的项目根目录,而非datas.py所在的website目录,直接用../scraping/...会导致路径计算偏差。此外你的CSV用分号分隔,默认csv.reader用逗号解析,会导致数据读取异常。

修改datas.py,通过文件路径构建绝对路径,并指定分隔符:

from flask import Blueprint, render_template
import csv
import os

datas = Blueprint('datas', __name__)


@datas.route('/datas')
def show_data():
    try:
        data = []
        # 获取当前文件的绝对目录
        current_dir = os.path.dirname(os.path.abspath(__file__))
        # 向上回溯到项目根目录
        root_dir = os.path.dirname(current_dir)
        # 拼接CSV文件的绝对路径
        csv_path = os.path.join(root_dir, 'scraping', 'exports-imports.csv')
        
        # 指定分号作为分隔符读取CSV
        with open(csv_path, 'r') as f:
            reader = csv.reader(f, delimiter=';')
            for row in reader:
                data.append(row)
        return render_template('datas.html', data=data)
    except FileNotFoundError:
        return f"Error: file not found at {csv_path}"

验证方法

启动main.py后访问http://localhost:9000/datas,即可看到正确渲染的表格数据。若仍报错,返回的错误信息会显示实际查找路径,可据此核对文件位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:35:21