利用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实现在windows下操作word的方法
Apr 28 Python
基于python中的TCP及UDP(详解)
Nov 06 Python
python GUI实例学习
Nov 21 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
使用python爬取B站千万级数据
Jun 08 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Python箱型图处理离群点的例子
Dec 09 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 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扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
js实现简易ATM功能
2020/10/27 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
python 判断网络连通的实现方法
2018/04/22 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
linux环境下Django的安装配置详解
2019/07/22 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
C#面试题
2016/05/06 面试题
优秀教师主要事迹
2014/02/01 职场文书
消防安全员岗位职责
2014/03/10 职场文书
教师三严三实心得体会
2014/10/11 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
Python 用户输入和while循环的操作
2021/05/23 Python