python - 使用 Django 和 csv.DictReader 解析 CSV

标签 python django parsing csv

我有一个包含许多字段(大约 24 个)的 Django 模型,显然我的用户希望能够使用电子表格上传来创建此对象的实例,而不是手动将所有数据输入表单。

我发现使用 python 的内置 CSV 模块应该可以使这相当简单,但我很难弄清楚如何使用它。

让我们从我所拥有的代码开始:

def upload_file(request):

  if request.method == "POST":
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
      handle_files(request.FILES['file'])
      return HttpResponseRedirect('/workflow/')
    else:
      print form.errors
      print request.FILES
      return HttpResponseRedirect('/workflow/upload')
  else:
    form = UploadFileForm()
    return render(request, 'fileform.html', {'formset': form})

这接受一个 CSV 文件作为上传,并将其交给 handle_files 来处理解析和对象创建。这是我遇到问题的方法。

def handle_files(f):
    reader = csv.DictReader(f, delimiter=' ', quotechar='|')
    ... #?

我一直在尝试模仿 python 文档 ( http://docs.python.org/2/library/csv.html ),但 DictReader 的文档非常少。我是否提供了适当的参数 csv.DictReader()?如果有,我怎样才能从 reader 中获取信息?我将为用户提供一个模板,因此我可以假设 CSV 文件的每一列都有一个可预测的数据。也就是说,我知道 A 列将有对应于字段 X 的数据,B 列对应于 Y,等等。我如何着手解析来自读取器的数据,然后使用该数据创建对象?

我猜它会是这样的:

for row in reader:
    X=row[1]
    Y=row[2]
    #etc
    my_object = MyObject(x=X, y=Y)
    my_object.save()

这路不通?我应该使用其他类型的 CSV 阅读器吗?

感谢您的帮助,我知道这篇文章中有很多问题。

最佳答案

我最近才开始使用 Django,但之前使用过 python csv 库。当我使用它时,我只需执行以下操作:

import csv
...
reader = csv.reader(f)
for row in reader:
    #do something with each row
f.close()

所以你们非常接近。此外,索引从 0 开始,因此如果您想要第一个元素,请使用 row[0]

关于csv库有更多信息here .如果您的文件格式不同,您只想使用定界符和其他参数。

关于python - 使用 Django 和 csv.DictReader 解析 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17929858/

相关文章:

python - 使用 Python 将 CSV 元素从列合并到行

django - 从 S3 wagtail 提供静态和媒体文件

Django反向导致url循环导入,为什么?

php - 解析我无法识别为对象、数组或 Json 的字符串

python - 将cProfile结果保存到可读的外部文件中

python - web2py 的 'image blog' 上的简单 select 语句出现错误

python - 如何在 Django Admin 的 "Change List"页面显示上传的图片?

python - 添加 SlugField 字段类型时出现问题 (Django 1.6.3)

json - 将 JSON.parse() 位置转换为行号和列

java - 解析带引号的 json 数据