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)