Django处理Excel,CSV文件

1 .处理Excel文件:

  • 通过前台传入Excel文件进行解析

 

import xlrd

 def create(self, request, *args, **kwargs):
        try:
            with transaction.atomic():
                files = request.data
                file = files['file']
                wb = xlrd.open_workbook(filename=None, file_contents=file.read())  # 关键点在于这里,file_contents为字符串流
                table = wb.sheets()[0]   #获取第一个sheet,可根据实际修改(下标或sheet名)
                nrows = table.nrows  # 行数
                list = []

                for i in range(1, nrows):     #第一行为表头,选择跳过
                    rowValues = table.row_values(i)  # 一行的数据
                    # 由于前台传的日期变为float型,转换成约定格式
                    t = xlrd.xldate_as_tuple(rowValues[0], 0)   
                    date = datetime.datetime(*t)
                    cell = date.strftime('%Y-%m-%d %H:%M:%S')  
                    operatorId = str(int(rowValues[3]))
                    list.append(models.ThicknessDataModel(DateTime=cell, ProductName=rowValues[1], TimeNode=rowValues[2]
                                                          , OperatorId=operatorId, SampleSN=rowValues[4], FixtureSn=rowValues[5]
                                                          , result=rowValues[6], Thickness=rowValues[7], Voltage=rowValues[8]
                                                          , Impedance=rowValues[9]))
                    # models.ThicknessDataModel.objects.create(DateTime=cell, ProductName=rowValues[1], TimeNode=rowValues[2]
                    #                                       , OperatorId=rowValues[3], SampleSN=rowValues[4], FixtureSn=rowValues[5]
                    #                                       , result=rowValues[6], Thickness=rowValues[7], Voltage=rowValues[8]
                    #                                       , Impedance=rowValues[9])
                models.ThicknessDataModel.objects.bulk_create(list)
                return ReturnData(statusCode=status.HTTP_200_OK, message=_('成功'))

        except Exception as e:
            logger_supplier.error(e)
            return ReturnData(statusCode=status.HTTP_400_BAD_REQUEST, message=_('失败'))

2. 处理CSV文件:

  • 解析本地文件

 

    def create(self, request, *args, **kwargs):
        try:
            with transaction.atomic():
                with open(os.path.join(os.path.dirname(os.path.abspath(__file__)) +'/厚度.csv')) as f_csv:     #打开本地文件
                    table = csv.reader(f_csv)   #使用CSV读入文件
                    list = []
                    headings = next(table)    #跳过第一行表头栏
                    for rowValues in table:
                        print(rowValues)
                        # rowValues = table.row_values(i)  # 一行的数据
                        # 由于前台传的日期变为2019-3-22 14:21,转换成约定格式
                        cell = datetime.datetime.strptime(rowValues[0], "%Y-%m-%d %H:%M").strftime(
                            "%Y-%m-%d %H:%M:%S")
                        list.append(models.ThicknessDataModel(DateTime=cell, ProductName=rowValues[0], TimeNode='test'    #rowValues[2]
                                                              , OperatorId=rowValues[1], SampleSN=rowValues[2], FixtureSn=rowValues[3]
                                                              , result=rowValues[4], Thickness=rowValues[5], Voltage=rowValues[6]
                                                              , Impedance=rowValues[7]))
                    models.ThicknessDataModel.objects.bulk_create(list)
                return ReturnData(statusCode=status.HTTP_200_OK, message=_('成功'))

        except Exception as e:
            logger_supplier.error(e)
            return ReturnData(statusCode=status.HTTP_400_BAD_REQUEST, message=_('失败'))

  • 解析前台传入的CSV文件

 

    def create(self, request, *args, **kwargs):
        try:
            with transaction.atomic():
                files = request.data
                csv_file = request.FILES['file']
                csv_file.seek(0)     #将光标聚焦到文件开头
                file_data = csv_file.read().decode('utf-8')
                lines = file_data.split('\r')
                list=[]
                for line in lines[1:]:     #从第二行开始  跳过第一行表头
                    rowValues = line.split(',')  # 一行的数据
                        # 由于前台传的日期变为2019-3-22 14:21,转换成约定格式
                    cell = datetime.datetime.strptime(rowValues[0], "%Y-%m-%d %H:%M").strftime(
                        "%Y-%m-%d %H:%M:%S")
                    list.append(models.ThicknessDataModel(DateTime=cell, ProductName=rowValues[0].strip() , TimeNode='test'    #rowValues[2]
                                                          , OperatorId=rowValues[1].strip() , SampleSN=rowValues[2].strip(), FixtureSn=rowValues[3].strip()
                                                          , result=rowValues[4].strip(), Thickness=rowValues[5].strip(), Voltage=rowValues[6].strip()
                                                          , Impedance=rowValues[7].strip()))
                    models.ThicknessDataModel.objects.bulk_create(list)
                return ReturnData(statusCode=status.HTTP_200_OK, message=_('成功'))

        except Exception as e:
            logger_supplier.error(e)
            return ReturnData(statusCode=status.HTTP_400_BAD_REQUEST, message=_('失败'))


转载自:https://www.jianshu.com/p/0d15ed85df2b
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebOffice是一款由北京点聚信息技术有限公司提供的完全免费(商业用途也免费)且功能强大的在线Word/excel/wps编辑辅助控件,可以实现: 1.在线编辑Word、Excel、PPT、WPS... ... 2.全面支持MS Office的界面定制,包括对于Office2007的全面支持 3.修订留痕 4.限制打印、保存、复制 5.直接保存到服务器,支持标准Http Post协议 6.强大的书签管理 7.套红、文档保护 8.模板管理 9.其他功能扩展 10.提供开发论坛http://www.dianju.cn/forum/,在其中提供软件更新及问题回答服务 本控件不同于其它同类软件,不是基于微软的开放源码DsoFramer,也不基于OLE,可以解决DsoFramer及其派生产品的一些稳定性问题 本控件不同于其它同类收费软件,本控件完全免费和界面完全可控制。 点聚会定期更新本控件,并解答论坛上的询问,免费不代表免服务,每一个使用者都能得到及时服务。 安装包内包含: 1.WebOffice安装包(仅包含WebOffice控件) 2.WebOffice接口SDK 3.WebOffice网页接口调用例子 4.DES手写及签章系统(Office签章系统)试用版。 5.演示章及证书 6.点聚产品白皮书 WebOffice组件可以无缝集成点聚公司的电子签章和手写审批类产品。 点聚信息(http://www.dianju.com.cn)是国内专业的安全和文档中间件软件制造商。公司注重自主知识产权产品的研发,始终坚持技术为本、服务为先的原则,在电子印章、手写签批、安全版式文档和电子表单等领域处于国内领先水平。 点聚自主研发的版式文件系统独创性的将整个系统缩小为1M大小的组件,并在多项重要技术指标上领先PDF和其它版式格式。 点聚支持全系列手写及签章解决方案,可同时提供Office签章系统(Word/Excel/Wps)、网页签章系统、版式签章系统. 点聚是国内唯一一家同时拥有国密和军密资质的电子印章及安全文档产品提供商(国密、军密、公安部销售许可)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值