我有一個包含許多字段(大約24)的Django模型,顯然我的用戶希望能夠使用電子表格上傳而不是手動輸入所有數據來創建此對象的實例成形式。使用Django和csv.DictReader解析CSV
我發現使用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閱讀器嗎?
感謝您的幫助,我知道這個帖子中有很多問題。
什麼DictReader的那麼點? –
[docs](http://docs.python.org/2/library/csv.html#csv.DictReader)表示它將「創建一個像普通讀者一樣操作的對象,但將讀取的信息映射爲字典其中的鍵由可選的fieldnames參數給出,如果省略了fieldnames參數,則csvfile的第一行中的值將用作字段名稱。這聽起來像你將能夠使用行[「列A」](或根據列名稱不同的鍵) –