2011-08-20 39 views
1

我有這個測試內容的CSV文件:Python的CSV模塊中表現不同的Django視圖

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產生一個文件對象,當遍歷產生線條。

0

我認爲你通過閱讀文件而不是僅僅提供給讀者而犯了一個錯誤。

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

應該是:

for row in csv.reader(request.FILES['csv_file']): 
相關問題