Python django上传文件,以csv格式处理和下载
我开发了一个应用程序,允许用户上传文件。 另一方面 我有一些python脚本,它接受一个文本文件,将其转换为CSV并执行一些操作。此脚本在终端中运行时工作正常。 现在,我想将该python脚本应用到Django中的文件上传,并在httpResponse中显示该文件,以便下载 python脚本 views.pyPython django上传文件,以csv格式处理和下载,python,django,csv,pandas,Python,Django,Csv,Pandas,我开发了一个应用程序,允许用户上传文件。 另一方面 我有一些python脚本,它接受一个文本文件,将其转换为CSV并执行一些操作。此脚本在终端中运行时工作正常。 现在,我想将该python脚本应用到Django中的文件上传,并在httpResponse中显示该文件,以便下载 python脚本 views.py from django.shortcuts import render, redirect from django.conf import settings from django
from django.shortcuts import render, redirect
from django.conf import settings
from django.core.files.storage import FileSystemStorage
from uploads.core.models import Document
from uploads.core.forms import DocumentForm
def home(request):
documents = Document.objects.all()
return render(request, 'core/home.html', { 'documents': documents })
def model_form_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('home')
else:
form = DocumentForm()
return render(request, 'core/model_form_upload.html', {
'form': form
})
Models.py
class Document(models.Model):
document = models.FileField(upload_to='documents/')
模板上传页面
{% extends 'base.html' %}
{% block content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
<p><a href="{% url 'home' %}">Return to home</a></p>
{% endblock %}
{%extends'base.html%}
{%block content%}
{%csrf_令牌%}
{{form.as_p}}
上传
{%endblock%}
import csv
import pandas as pd
def process_file(file_handle):
df = pd.read_csv(file_handle, delimiter = '\t' , usecols['Sample','Cohort','Metabolite Name','Intensity'])
df = df[df['Cohort'].str.contains("std")]
df = df.groupby(['Cohort', 'Metabolite Name'])['Intensity'].sum().reset_index()
df = df[['Cohort','Intensity']]
c = 'Cohort'
s = df.set_index([c, df.groupby(c).cumcount() + 2]).Intensity
df = s.unstack().add_prefix('Intensity').reset_index()
return df.to_csv()
...
if form.is_valid():
document = form.save()
# call to the new method
csv = process_file(document.document)
response = HttpResponse(csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=result.csv'
return response
...
执行此操作后,我得到IOError:文件句柄不存在。请调试:确保
document.document
不是None,并且它具有read()
方法。根据read_csv()
应该支持FileField
Hi,我只是用稍微不同的文件输入(文本文件)进行了尝试,并以不同的方式进行了处理:def process_file(f):file=open(f,“r”);x=文件。读取()。。。。。新建_文件=打开(“result.txt”、“w”);返回(new_file.write(x));file.close()
其他所有内容都完全相同,我收到的错误是文件不正确。。。无效文件:
...
if form.is_valid():
document = form.save()
# call to the new method
csv = process_file(document.document)
response = HttpResponse(csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=result.csv'
return response
...