如何在Python Flask中读取文件

5
我希望能够实现一个简单的搜索功能,当用户在文本框中输入文本时,它将浏览json文件[large.js],以查看是否有任何匹配记录。如果是,则会显示结果。
问题是,当我运行py文件时,出现错误“没有这样的文件或目录“大型””。
任何想法都将是伟大的。谢谢。
以下是python代码[application.py]:
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
WORDS = []
with open("large", "r") as file:
    for line in file.readlines():
        WORDS.append(line.rstrip()) 
@app.route("/")
def index():
    return render_template("index.html")

@app.route("/search")
def search():
    q = request.args.get("q")
    words = [word for word in WORDS if word.startswith(q)]
    return jsonify(words)

以下是HTML代码【templates/index.html】:
<input type="text">
<ul></ul>
<script src ="large.js"></script>
<script>
let input = document.querySelector("input")
input.onkeyup = function (){
let html = "";
if (input.value){
for (word of WORDS){
if (word.startsWith(input.value)){
html += "<li>" + word +"</li>";
}} }
document.querySelector("ul").innerHTML = html;
};
</script>

包含JSON数据的大型JS文件

let WORDS = [
"a",
"abandon",
"abandoned",
"ability",
"able"]

enter image description here

enter image description here


你尝试过给出 large.js 文件的绝对位置吗? - bumblebee
是的,我尝试过但没有成功。 - epiphany
根据错误信息,我的理解是它找不到文件。可能是路径问题。另一件事是,你正在使用JavaScript文件存储json。如果该文件唯一目的是存储json数据,为什么不使用“.json”扩展名呢? - Pankaj
将JS文件另存为包含列表的PY文件,您可以导入WORDS以实现高效。 - Rajan
@epiphany 在你的应用程序结构中,large.js 存储在哪个文件夹中? - kellymandem
请查看快照编辑。 - epiphany
1个回答

5
  1. 创建一个名为static的文件夹,在其中再创建一个名为js的文件夹,将你的large.js文件放到这个文件夹中。

  2. templates/index.html中将 <script src ="large.js"></script> 修改为 <script src ="{{ url_for('static', filename='js/large.js') }}"></script>

之后您的应用程序结构应该类似于下面这样:

enter image description here

然后,尝试在您的代码中添加以下内容,并告诉我发生了什么。

import os
from flask import Flask, render_template, request, jsonify

basedir = os.path.abspath(os.path.dirname(__file__))
data_file = os.path.join(basedir, 'static/js/large.js')

WORDS = []
with open(data_file, "r") as file:
    for line in file.readlines():
        WORDS.append(line.rstrip())

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/search")
def search():
    q = request.args.get("q")
    words = [word for word in WORDS if word.startswith(q)]
    return jsonify(words)

即使我手动输入WORDS数组中的单词,例如WORDS = ["a", "b"],输入框仍不会显示匹配结果。 - epiphany
@epiphany 我已经编辑了我的答案,以解决我认为的问题,请再试一次并告诉我新解决方案的效果如何。 - kellymandem
为了更好的解释,你可以跟随官方 Flask 教程 或者仅仅阅读官方文档 - kellymandem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接