我目前有一个python脚本,它使用pd.read_html从站点提取数据。然后我使用df.to_excel将'xlsxwriter'设置为引擎。
我正试图找到一种方法将其合并到django webapp中。但是,我迷失了如何做到这一点,甚至知道如果可能的话。
我已经看到了几种在django中创建可下载的excel文件的方法,但没有一种方法将pandas作为在excel文件中创建数据的驱动力。用于创建没有django的excel文件的python代码有点长,所以不确定要显示什么。以下是我的熊猫代码的一部分:
xlWriter = pd.ExcelWriter(excel_sheet2, engine='xlsxwriter')
workbook = xlWriter.book
money_fmt = workbook.add_format({'num_format': 42, 'align': 'center', 'text_wrap': True})
text_fmt = workbook.add_format({'bold': True, 'align': 'center', 'text_wrap': True})
for i, df in enumerate(dfs):
for col in df.columns[1:]:
df.loc[df[col] == '-', col] = 0
df[col] = df[col].astype(float)
df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i))
以下是我的templates.html代码
{% block content %}
<form type="get" action="." style="margin: 0">
<input id="search_box" type="text" name="search_box" placeholder="Enter URL..." >
<button id="search_submit" type="submit" >Submit</button>
</form>
{% endblock %}
这是我的views.py
的开头def financials(request):
return render(request, 'personal/financials.html')
if request.method == 'GET':
search_query = request.GET.get('search_box', None)
url = search_query
dfs = pd.read_html(url, flavor='html5lib')
答案 0 :(得分:1)
为什么不在Django视图中调用您的pandas函数并将文件保存到/tmp
。获得文件后,您只需发送文件即可告诉浏览器将其视为回复中的文件。
然后您可以返回文件
from django.http import HttpResponse
def my_view(request):
# your pandas code here to grab the data
response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="foo.xls"'
return response
答案 1 :(得分:0)
我只是想添加一下我最终想出的东西,让一切正常。我没有在HttpResponse中包含我的数据,而是在wb.save()命令中包含了响应。这使得一切正常,包括在下载之前对电子表格进行格式化。
wb = load_workbook(excel_sheet2)
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename= "Data.xlsx"'
wb.save(response)
return response