首页 > 解决方案 > 在 Django 中解析和处理 CSV

问题描述

提前道歉,因为我是 Django 新手(而且我还必须更新我的 Python 技能)。我正在尝试做一个简单的示例,通过表单上传文件,然后在终端中打印行(作为进行一些实际处理之前的测试)。我的 views.py 包含以下内容:

def upload_csv(request):
    if "GET" == request.method:
        return render(request, "portal/csvupload.html")
    csv_file = request.FILES["csv_file"]
    handle_files(csv_file)
    return HttpResponseRedirect(reverse("portal:csvupload"))

def handle_files(csvfile):
    csv_reader = csv.reader(csvfile)
    for line in csv_reader:
        print(line)

现在这会返回一条错误消息,说“预期的 str、字节或 os.PathLike 对象,而不是 InMemoryUploadedFile ”,我不确定基于错误消息的代码有什么问题?从 Python 的角度来看,我认为它看起来不错,但也许它与重定向有关?欣赏所有答案

标签: pythondjangocsv

解决方案


request.FILES["csv_file"]正在返回一个InMemoryUploadedFile对象,csv.reader但不知道如何处理这样的对象。我相信你需要调用对象的read方法:handle_files(csv_file.read()). 请注意文档中的警告:“使用此方法要小心:如果上传的文件很大,如果您尝试将其读入内存,它可能会使您的系统不堪重负。您可能希望使用 chunks() 代替;见下文。”


推荐阅读