【问题标题】:Python's CSV module behaves differently in Django viewPython CSV 模块在 Django 视图中的行为不同
【发布时间】:2011-08-20 15:58:58
【问题描述】:

我有一个包含此测试内容的 csv 文件:

1,2,3
4,5,6
7,8,9

使用 csv 模块以通常的方式解析它可以正常工作:

>>> for row in csv.reader(open('test.csv')):
...     print row
... 
['1', '2', '3']
['4', '5', '6']
['7', '8', '9']

然后我尝试在 django 视图中使用相同的过程:

def upload_csv(request):
    if request.method == 'POST':
        form = ProductCSVUploadForm(request.POST, request.FILES)
        if form.is_valid():
            for row in csv.reader(request.FILES['csv_file'].read()):
                print row
    else:
        form = ProductCSVUploadForm()
    return render_to_response('upload_csv.html', locals())

这给出了输出:

['1']
['', '']
['2']
['', '']
['3']
[]
['4']
['', '']
['5']
['', '']
['6']
[]
['7']
['', '']
['8']
['', '']
['9']
[]

Django 是否在更改数据?我怎样才能阻止这种情况发生?

【问题讨论】:

  • 呵呵,我也遇到过:我写了一个问题,在校对的时候,答案就出来了。 :) 祝你好运。

标签: python django csv


【解决方案1】:

马特添加到问题的顶部:

发布后,我得到了答案:删除 .read()。如果您愿意,请随时删除此版主。

问题的原因是read返回一个字符串,它在迭代时给出字符,而open产生一个文件对象,它在迭代时产生行。

【讨论】:

    【解决方案2】:

    我认为您通过阅读文件而不是仅仅将其提供给阅读器是错误的。

     for row in csv.reader(request.FILES['csv_file'].read()):
    

    应该是:

     for row in csv.reader(request.FILES['csv_file']):
    

    【讨论】:

      猜你喜欢
      • 2014-03-11
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 2012-04-29
      相关资源
      最近更新 更多