如何使用Flask将文本文件读入.py文件,然后获得逐行数组?

时间:2019-03-21 15:25:17

标签: python-3.x flask url-for

请在此处查看我的命令行输出:(https://i.stack.imgur.com/l8Qbl.jpg

它说文件/static/poemInput.txt不存在..但是如您所见,当我执行ls static时,它显然存在。我如何命名文件有问题吗?

上下文: 我对flask非常陌生,但是我有一个要在线部署的python应用程序。我只是想导入我在应用程序中使用的文本文件,但是找不到。

我知道文本文件应该在静态文件夹中,并且根据需要使用了open_url。

我遇到了指定的错误here,所以我的with open块位于with.app.test_request_context():块中。

编辑 我尝试了Luan Nguyen的建议,并使用了app.open_resource()函数,但是随后得到了UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 13: ordinal not in range(128)。通过将编码设置为latin1,此问题已在python的open函数(如我的原始代码)中得到解决。如何使用flask的open_resource函数来做到这一点?我尝试做f.encode('latin1'),但收到错误消息:_io.TextIOWrapper' object has no attribute 'encode'

本质上:如何使用Flask将文本文件读取到.py文件中,然后获取逐行数组?

1 个答案:

答案 0 :(得分:0)

问题

问题出在您的open通话中。 url_for返回了该字符串'/static/poemInput.txt'。当您将此字符串直接放入Python的open中时,它将找到文件 at <system_root>/static/poemInput.txt,而不是文件 at <your_project_directory>/static/poemInput.txt。 / p>

解决方案

鉴于您可能有一个正在运行的Flask实例,应该使用Flask的open_resource函数。具有以下结构:

/myapplication.py
/schema.sql
/static
    /poemInput.txt
    /style.css
/templates
    /layout.html
    /index.html

您可以执行以下操作:

with app.open_resource('static/poemInput.txt') as f:
    contents = f.read()
    do_something_with(contents)