gpt4 book ai didi

python - django 上传文件,处理 pandas 并下载为 csv

转载 作者:行者123 更新时间:2023-12-05 06:40:03 26 4
gpt4 key购买 nike

我构建了一个允许用户上传文件的应用程序。另一方面,我有一些 python 脚本,它需要一个文本文件,将其转换为 CSV 并执行 pandas。该脚本在终端中运行时完美运行。现在我想将该 python 脚本应用于 Django 中的文件上传,并在 httpResponse 中显示该文件并提供下载。

python 脚本

import csv
import pandas as pd

df = pd.read_csv('raw_df.txt', 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()
df.to_csv()
print df;

View .py

    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
})

模型.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 %}

最佳答案

  1. 将您的文件处理包装在一个方法中:

    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()
  2. 在你看来:

    ... 
    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
    ...

关于python - django 上传文件,处理 pandas 并下载为 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43635052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com