[django]l利用xlrd实现xls文件导入数据

摘要:
代码:#coding:utf-8importosos。环境setdefault(“DJANGO_SETTINGS_MODULE”,“www.SETTINGS”)''当DJANGO版本大于或等于1.7时,应添加以下两句话:importdjangodjango。setup(),否则会出现错误django。果心例外情况。AppRegistryNotReady:将引发Modelsar

代码:

#coding:utf-8 

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") 

'''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''
import django

if django.VERSION >= (1, 7):#自动判断版本
    django.setup()

from keywork.models import DevData
import xlrd #excel读工具

data= xlrd.open_workbook('cs.xls') #打开文件
table = data.sheet_by_index(0) #获取工作表
nrows = table.nrows #行数
ncols = table.ncols #列数
colnames =  table.row_values(0)
WorkList = []
x = y = z = 0
for i in range(1,nrows):
    row = table.row_values(i) #获取每行值
    for j in range(0,ncols):
        if type(row[j]) == float: #如果值为float则转换为int,避免出现1输出为1.0的情况
            row[j] = int(row[j])
    if row: #查看行值是否为空
        if DevData.objects.filter(serv_id = row[0],user_flag=row[15]).exists():#判断该行值是否在数据库中重复
            x = x + 1 #重复值计数
        else:
            y = y + 1 #非重复计数
            WorkList.append(DevData(serv_id=row[0], serv_state_name=row[1], acc_nbr=row[2], user_name=row[3], acct_code=row[4], product_id=row[5],
                                            mkt_chnl_name=row[6], mkt_chnl_id=row[7],mkt_region_name=row[8], mkt_region_id=row[9],mkt_grid_name=row[10],
                                            sale_man=row[11],sale_outlets_cd1_name=row[12], completed_time=row[13],remove_data=row[14], user_flag=row[15],
                                            pro_flag=row[16], service_offer_id=row[17],service_offer_name=row[18], finish_time=row[19],staff_name=row[20],
                                            staff_code=row[21],org_name=row[22],prod_offer_name=row[23],day_id=row[24],
                                            )
                                    )
    else:
        z = z + 1     #空行值计数
DevData.objects.bulk_create(WorkList)
print '数据导入成功,导入'+str(x)+'条,重复'+str(y)+'条,有'+str(z)+'行为空!'

中间就遇见一个问题很让我纠结,就是xlrd 在读取数据时,会将 xls 单元格中所有可能是数字的数据都自动转换成 python 的 float。这时候,我们通过 str(cell.value) 会得到 12.0 (假设 cell.value = 12.0)。

解决办法:比如我的a=1,那么xlrd默认输出1.0,只需要int(a)就可以了!

免责声明:文章转载自《[django]l利用xlrd实现xls文件导入数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FreeRTOS再学习——2nd——信号量和优先级反转问题docker部署django项目、mysql主从搭建、django实现读写分离下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline

场景 使用Jenkins的流水线时,有时明明某些Python或Shell执行结果错误,但仍会继续运行下去,甚至于最终提示成功。这并不合我们的预期——出现错误及时停止。当然,还有那种小错误不影响构建的,希望继续执行下去的情况。 所以,场景有两个: 希望发现错误,及时中止执行的情况。 希望错误发生时,脚本仍继续执行的情况。 本文以上两种场景分别给出示例。...

jsTree通过AJAX从后台获取数据

页面代码: <div id="MenuTree"></div> javascript代码: $(document).ready(function($) { InitMenuTree(); }); functionInitMenuTree() { $('#MenuTree').data('jstree', false);...

layui在open弹出层回显,解决动态select数据回显问题

//监听数据表格工具条         table.on('tool(contentList)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"             var data = obj.data //获得当前行数据                 ,lay...

操作系统/应用程序、操作中的“并发”、线程和进程,python中线程和进程(GIL锁),python线程编写+锁

并发编程前言:       1、网络应用            1)爬虫 直接应用并发编程;            2)网络框架 django flask tornado 源码-并发编程            3)socketserver 源码-并发编程       2、运维领域            1)自动化开发-运维开发(机器的批量管理,任务的批量执...

wampserver修改mysql数据库密码的简单方式

刚装好的wampserver的数据库是没有密码的,所以可以直接登录,要设置密码,一种简单的方式如下: 打开phpMyadmin 初始状态没有密码,可以直接登录 登录之后,点击账户 点击修改权限,设置你的密码即可。 之后打开目录wamp>apps>phpmyadmin文件夹下的【config.inc.PHP】文件, 修改【$cfg['Se...

C#操作MongoDB入门

1、MongoDB安装及配置   (1)下载:       mongodb官网 https://www.mongodb.com/download-center             进入官网下载页,你会发现版本都是windows Server......  但是不要担心,本人亲测win10也可以用,所以放心大胆的下载就可以了。安装过程比较简单,下一步就...