利用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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
浅析Python中的多进程与多线程的使用
Apr 07 Python
介绍Python中的fabs()方法的使用
May 14 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
python unichr函数知识点总结
Dec 16 Python
python 破解加密zip文件的密码
Apr 22 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 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 ajax 分页类代码
2008/11/13 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
python 切片和range()用法说明
2013/03/24 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
python中logging库的使用总结
2017/10/18 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
简单了解python变量的作用域
2019/07/30 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
毕业生的自我评价范文
2013/12/31 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
治庸问责心得体会
2014/09/12 职场文书
2014年人事科工作总结
2014/11/19 职场文书
机械生产实习心得体会
2016/01/22 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android