Pandas 在 django 视图中读取 CSV 不起作用

Posted

技术标签:

【中文标题】Pandas 在 django 视图中读取 CSV 不起作用【英文标题】:Pandas Read CSV in django view not working 【发布时间】:2020-07-15 05:32:02 【问题描述】:

我要做的是,当用户上传 CSV 文件时。我正在尝试在熊猫中做功能。

Django 模板

<form action="% url 'upload-timeslot' %" method="post" enctype="multipart/form-data">
    % csrf_token %
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

我的看法

def bulk_timeslot_upload(request):
    if request.FILES:
        import pandas as pd
        csv = request.FILES['fileToUpload']
        data = pd.read_csv(csv)
        print(data)
    return render(request, 'bulk-timeslot.html')

当我尝试读取 csv 时,正在运行的服务器退出。如果我在全球范围内导入熊猫,服务器甚至不会运行。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,对我有帮助的是this answer。 (更多信息在Django docs)

views.py

def import_csv(request):
    if request.method == 'POST':
        form = ImportFileForm(request.POST, request.FILES)
        if form.is_valid():

            # the temporary_file_path() shows Dask where to find the file
            df_in = dd.read_csv(request.FILES['file_name'].temporary_file_path())

settings.py

FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.TemporaryFileUploadHandler',]

【讨论】:

【参考方案2】:

实际上 read_csv() 接收文件,但你的 request.FILES['fileToUpload'] 是内存缓冲区。因此,有两种可能的方法是将 csv 文件保存在您的系统中,然后通过传递整个路径来读取它,或者使用:

  def bulk_timeslot_upload(request):
    if request.FILES:
       import pandas as pd
       csv = request.FILES['fileToUpload']
       data = pd.read_csv(csv.read())
       print(data)
  return render(request, 'bulk-timeslot.html')

【讨论】:

这不起作用。我不知道,为什么正在运行的服务器会停止。如果它出错,它将显示错误。 django 服务器停止了!?? 是的,当我调用这个函数时它停止了

以上是关于Pandas 在 django 视图中读取 CSV 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

pandas读取csv文件时避免科学计数法(xxxe+09)

如何将csv文件输入Django [关闭]

在Django中构建一个数据驱动的仪表板以及pandas

在 pandas 中读取和写入 csv 会更改单元格值

pycharm中pandas读取csv文件 head方法无显示,IDEL中却可以

Pandas - 是不是可以在没有引号字符的情况下读取_csv?