我有一个包含此测试内容的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是否正在更改数据?我怎样才能阻止这种情况发生?
答案 0 :(得分:3)
马特补充问题的顶部:
发帖后,答案来了我:删除.read()。如果您愿意,请随时删除此版主。
问题的原因是read
返回一个字符串,它在迭代时给出字符,而open
产生一个文件对象,在迭代时产生行。
答案 1 :(得分:0)
我认为您通过阅读文件而不是仅仅将其提供给读者而犯了错误。
for row in csv.reader(request.FILES['csv_file'].read()):
应该是:
for row in csv.reader(request.FILES['csv_file']):