利用django如何解析用户上传的excel文件


Posted in Python onJuly 24, 2017

前言

我们在工作中的时候,会有这种需求:用户上传一个格式固定excel表格到网站上,然后程序负债解析内容并进行处理。我最近在工作中就遇到了,所以想着将解决的过程总结分享出来,方便大家参考学习,下面话不多说,来一起看看详细的介绍:

举一个简单的栗子,比如我们有这样一个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文件内容如下,编写一个简单的判断后缀的验证:

# 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]) #这里使用自定义的验证

处理excel表格我这里使用xlrd库,使用pip安装即可。此时处理POST请求时有2种方法:

  • 将用户上传的excel存储到磁盘中再读取交给xlrd处理。
  • 直接在内存中读取用户上传的excel读取交给xlrd处理。

这里我使用第二个办法——在不修改django默认settings.py配置情况下,用户上传的文件其实是InMemoryUploadedFile类型,这个类型有一个read()方法,所以views.py中可以内存直接读取内容而不用写磁盘再读取了:

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()) # 关键点在于这里
 table = wb.sheets()[0]
 row = table.nrows
 for i in xrange(1, row):
  col = table.row_values(i)
  print col
 return HttpResponse("ok")

其他文件类型同理,如果不需要保存用户上传的文件到硬盘其实都可以这么处理。这里记录2个和django处理excel有关的资源:

  • django-excel (本地下载)判断用户excel格式的三方库
  • https://assist-software.net/blog/how-export-excel-files-python-django-application 讲解如何导出excel的文章

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python采用getopt解析命令行输入参数实例
Sep 30 Python
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Django Highcharts制作图表
Aug 27 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
Django学习教程之静态文件的调用详解
May 08 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
python里运用私有属性和方法总结
Jul 08 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
Python编程之变量赋值操作实例分析
Jul 24 #Python
Python模块结构与布局操作方法实例分析
Jul 24 #Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 #Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 #Python
python引入导入自定义模块和外部文件的实例
Jul 24 #Python
Python3.X 线程中信号量的使用方法示例
Jul 24 #Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 #Python
You might like
php中引用符号(&amp;)的使用详解
2013/11/13 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
javascript parseInt 大改造
2009/09/27 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
jQuery操作cookie
2016/08/08 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
Python生成8位随机字符串的方法分析
2017/12/05 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
python中time库的实例使用方法
2019/10/31 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
房屋公证委托书
2014/04/03 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书