请在此处查看我的命令行输出:(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文件中,然后获取逐行数组?
答案 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)