如何通过Flask接口实现CSV文件查询并返回匹配用户输入的行数据
Flask CSV搜索接口修复方案
原有代码核心问题
- 缺少Flask实例初始化代码,
@app.route无法正常生效 - CSV文件全局仅读取一次,首次请求读取后文件指针到末尾,后续请求无法获取数据
- 冗余的
request.form取值逻辑,GET请求没有Form表单数据,会直接抛出异常 - 存在多处语法错误:缩进错误、字符串未闭合、换行符拼写错误、行匹配逻辑完全错误(
row[0 or 1 or 2 ...]实际等价于row[0],仅判断第一列) - 响应生成逻辑错误,
print(row)仅在控制台输出内容,返回的响应为空 - 硬编码仅允许
healthy/unhealthy作为输入,与任意关键词搜索的需求不符
修复后完整可运行代码
import csv from flask import Flask, make_response, jsonify # 初始化Flask实例 app = Flask(__name__) # CSV文件路径常量 CSV_PATH = '/home/logs/containerlogs.csv' @app.route('/logcheck/<user_input>', methods=['GET']) def logcheck(user_input): # 存储匹配到的行 matched_rows = [] try: # 每次请求重新读取CSV,避免指针偏移问题 with open(CSV_PATH, 'r', encoding='utf-8') as f: csv_reader = csv.reader(f, delimiter=',') for row in csv_reader: # 去除每行元素的前后空格后,判断是否包含用户输入的关键词 cleaned_row = [item.strip() for item in row] if user_input.strip() in cleaned_row: matched_rows.append(cleaned_row) except FileNotFoundError: return make_response("CSV文件不存在,请检查路径配置", 404) # 无匹配结果的返回 if not matched_rows: return make_response(f"未找到和关键词【{user_input}】匹配的内容", 404) # 返回JSON格式的匹配结果,方便页面解析 return jsonify(matched_rows) if __name__ == '__main__': # 启动开发调试服务,默认端口5000 app.run(debug=True)
功能说明
- 支持任意关键词输入,会遍历CSV所有列搜索匹配内容,返回所有符合条件的完整行
- 如果需要返回纯文本格式的结果,可以将
return jsonify(matched_rows)替换为return make_response('\n'.join([','.join(row) for row in matched_rows]), 200, {'Content-Type': 'text/plain'}) - 新增了文件不存在、无匹配结果的异常处理,避免服务直接崩溃
- 开发阶段开启了debug模式,生产环境部署请关闭debug并配置对应WSGI服务
内容的提问来源于stack exchange,提问作者JayK
相关产品推荐
相关产品推荐

