我编写了一个python程序,它从web中抓取数据并将其保存为.csv文件。我想使用flask在HTML页面中显示。csv文件,但是在尝试了很多次之后,我的打开文件找不到。csv文件的位置。
我的项目结构是这样的:
├── main.py
├── scraping
│ ├── exports-imports.csv
├── website
│ ├── __init__.py
│ ├── templates
│ │ ├── datas.html
│ └── datas.py
main.py:
from website import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True, port=9000)
initpy:
from flask import Flask
def create_app():
app = Flask(__name__)
app.debug = True
from .datas import datas
app.register_blueprint(datas, url_prefix='/')
return app
datas.html:
<table>
<tr>
<thead>
<th>Year</th>
<th>Exports</th>
<th>Imports</th>
</thead>
</tr>
{% for row in data %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
</tr>
{% endfor %}
</table>
* * * exports-imports.csv * * *:
1964;33193;30084
1965;36635;36019
1966;41224;37156
1967;44505;35884
1968;50900;41506
1969;58061;50092
datas.py:
from flask import Blueprint, render_template
import csv
datas = Blueprint('datas', __name__)
@datas.route('/datas')
def show_data():
try:
data = []
with open('../scraping/exports-imports.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
data.append(row)
return render_template('datas.html', data=data)
except FileNotFoundError:
return "Error: file not found"
我已经尝试改变export -imports.csv文件在我的项目周围的位置,但仍然烧瓶无法检测到它位于哪里,即使当我使用Ctrl +鼠标右键单击让我找到源CSV文件。我在网上搜索过,每个人都这么做,但这对我不起作用。我希望这里有人能帮我。如果可能的话,不要使用pandas和其他库。
下面的示例使用应用程序父目录的绝对路径作为基础,将相对路径规范添加到文件中。
from flask import Blueprint, current_app, render_template
import csv, os
datas = Blueprint('datas', __name__)
@datas.route('/datas')
def show_data():
try:
data = []
path = os.path.join(
current_app.root_path, os.pardir,
'scraping', 'exports-imports.csv'
)
with open(path, 'r') as f:
reader = csv.reader(f)
for row in reader:
data.append(row)
return render_template('datas.html', data=data)
except FileNotFoundError:
return "Error: file not found"
尝试使用绝对路径(而不是相对路径)来打开csv文件
from pathlib import Path
with open(Path(__file__).parent.absolute() / Path('../scraping/exports-imports.csv'), 'r') as f:
reader = csv.reader(f)