欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用django如何解析用戶上傳的excel文件

 更新時(shí)間:2017年07月24日 11:36:34   作者:Roy  
這篇文章主要給大家介紹了關(guān)于利用django如何解析用戶上傳的excel文件的相關(guān)資料,這是最近在工作中遇到的一個(gè)問題,覺著有必要分享出給大家,需要的朋友可以參考借鑒,下面來一起看看詳細(xì)的介紹吧。

前言

我們在工作中的時(shí)候,會(huì)有這種需求:用戶上傳一個(gè)格式固定excel表格到網(wǎng)站上,然后程序負(fù)債解析內(nèi)容并進(jìn)行處理。我最近在工作中就遇到了,所以想著將解決的過程總結(jié)分享出來,方便大家參考學(xué)習(xí),下面話不多說,來一起看看詳細(xì)的介紹:

舉一個(gè)簡單的栗子,比如我們有這樣一個(gè)HTML:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 </head>
 <body>
 <p>上傳EXCEL表格</p>
 <form class="" action="" method="post" enctype="multipart/form-data" >
  {% csrf_token %}
  <input type="file" name="excel">
  <input type="submit" value="上傳">
 </form>
 </body>
</html>

forms.py文件內(nèi)容如下,編寫一個(gè)簡單的判斷后綴的驗(yàn)證:

# coding=utf-8
from django import forms
from django.utils.translation import gettext as _
from django.core.exceptions import ValidationError
def validate_excel(value):
 if value.name.split('.')[-1] not in ['xls','xlsx']:
 raise ValidationError(_('Invalid File Type: %(value)s'),params={'value': value},)
class UploadExcelForm(forms.Form):
 excel = forms.FileField(validators=[validate_excel]) #這里使用自定義的驗(yàn)證

處理excel表格我這里使用xlrd庫,使用pip安裝即可。此時(shí)處理POST請求時(shí)有2種方法:

  • 將用戶上傳的excel存儲(chǔ)到磁盤中再讀取交給xlrd處理。
  • 直接在內(nèi)存中讀取用戶上傳的excel讀取交給xlrd處理。

這里我使用第二個(gè)辦法——在不修改django默認(rèn)settings.py配置情況下,用戶上傳的文件其實(shí)是InMemoryUploadedFile類型,這個(gè)類型有一個(gè)read()方法,所以views.py中可以內(nèi)存直接讀取內(nèi)容而不用寫磁盤再讀取了:

def post(self, request, *args, **kwargs):
 form = UploadExcelForm(request.POST, request.FILES)
 if form.is_valid():
 wb = xlrd.open_workbook(
  filename=None, file_contents=request.FILES['excel'].read()) # 關(guān)鍵點(diǎn)在于這里
 table = wb.sheets()[0]
 row = table.nrows
 for i in xrange(1, row):
  col = table.row_values(i)
  print col
 return HttpResponse("ok")

其他文件類型同理,如果不需要保存用戶上傳的文件到硬盤其實(shí)都可以這么處理。這里記錄2個(gè)和django處理excel有關(guān)的資源:

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論