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

Flask货币转换器:如何读取CSV文件并根据POST请求的货币代码计算兑换金额

解决Flask货币转换器的CSV数据匹配与计算问题

嘿,我来帮你搞定这个货币兑换计算的问题!核心思路是把CSV里的货币数据预加载成一个**键为货币代码(code)、值为买入价(bid)**的字典,这样就能通过用户选择的货币代码快速查到对应的价格,再完成计算。下面是具体的实现步骤和代码:

1. 预加载CSV数据为字典

首先,我们用Python内置的csv模块读取out.csv文件,把数据转成一个字典。最好在Flask app启动时就加载一次,避免每次请求都重复读文件(虽然你的文件很小,但这是更高效的做法)。

from flask import Flask, render_template, redirect, request
import csv

app = Flask(__name__)

# 全局加载货币数据字典
currency_rates = {}
with open('out.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file, delimiter=';')  # 注意你的CSV是分号分隔的
    for row in reader:
        # 把bid转成浮点数,方便后续计算
        currency_rates[row['code']] = float(row['bid'])

2. 修改POST请求逻辑完成计算

接下来,在kantor路由的POST分支里,我们从表单获取用户输入的金额和货币代码,然后从字典中取出对应的买入价,完成乘法计算。同时要处理一些异常情况(比如用户输入非数字金额、选择了不存在的货币代码):

@app.route('/', methods=['GET', 'POST'])
def kantor():
    if request.method == 'GET':
        # 可以把货币列表传递给前端,方便生成下拉选项(可选优化)
        currencies = list(currency_rates.keys())
        return render_template('kantor.html', currencies=currencies)
    elif request.method == 'POST':
        try:
            waluta = request.form['waluta']
            amount = float(request.form['amount'])
            
            # 检查货币代码是否存在于字典中
            if waluta not in currency_rates:
                return render_template('wynik.html', error="所选货币不存在")
            
            # 计算兑换金额
            bid_rate = currency_rates[waluta]
            result = amount * bid_rate
            
            # 保留两位小数,符合货币展示习惯
            formatted_result = round(result, 2)
            return render_template('wynik.html', amount=amount, waluta=waluta, result=formatted_result)
        
        except ValueError:
            # 处理用户输入非数字金额的情况
            return render_template('wynik.html', error="请输入有效的数字金额")

3. 前端模板(wynik.html)展示结果

在wynik.html里,你可以这样展示计算结果或错误提示:

<!DOCTYPE html>
<html>
<head>
    <title>兑换结果</title>
</head>
<body>
    {% if error %}
        <p style="color: red;">{{ error }}</p>
    {% else %}
        <p>{{ amount }} {{ waluta }} 可兑换 {{ result }} PLN</p>
    {% endif %}
    <a href="/">返回兑换页面</a>
</body>
</html>

额外优化建议

  • 前端表单的货币选择下拉框,可以用我们传递的currencies列表动态生成,避免手动写选项:
    在kantor.html里:
    <select name="waluta">
        {% for code in currencies %}
            <option value="{{ code }}">{{ code }}</option>
        {% endfor %}
    </select>
    
  • 如果你的CSV文件可能会更新,可以考虑添加一个定时刷新字典的逻辑,或者在需要时重新读取文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:12:35