zoukankan      html  css  js  c++  java
  • [django]l利用xlrd实现xls文件导入数据

    代码:

    #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)就可以了!

  • 相关阅读:
    【leetcode_easy_greedy】1403. Minimum Subsequence in Non-Increasing Order
    【leetcode_easy_sort】1030. Matrix Cells in Distance Order
    word2010 标题编号
    WORD2013中如何使用多级列表自动编号(转)
    Javaweb权限管理设计思路 (转)
    前后端分离模式下的权限设计方案 (转)
    Axure rp8.1.0.3381 3382 激活码(2019-07-26 亲测可用) 转
    通达OA开发网址
    C# Winform 跨线程更新UI控件常用方法汇总 (转)
    C#中的Invoke
  • 原文地址:https://www.cnblogs.com/CQ-LQJ/p/5329906.html
Copyright © 2011-2022 走看看