zoukankan      html  css  js  c++  java
  • 如何随机生成大数据存储到指定excel文档里

     本次主要采用的是python3的第三方库xlwt,来创建一个excel文件。具体步骤如下:

    1、确认存储位置,文件命名跟随时间格式

    2、封装写入格式

    3、实现随机数列生成

    4、定位行和列把随机数写入

    5、统一写入条目数,实现入参确认条目

    6、封装对文件夹内多余数据表的删除操作。

    说明:最大支持60000条,这个是由于excel格式限制的,如果对大数据有更高要求的如,写入6000000数据的话可以进行循环获取到100个excel来导入。

    实际文件生成效果图:

    文件内容格式如下图

    源码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    import xlrd
    import xlwt
    from my_framework.log import Logger
    import time,os
    import random
    # create a logger instance
    logger = Logger(logger="file_process").getlog()
    class file_process():
        """封装操作excel的方法"""
      
        # 获取某一页sheet对象
        def create_excel_file(self):
            da = time.strftime("%Y-%m-%d/%H-%M-%S", time.localtime())
            self.da_a = str(da.split('/')[0])
            self.da_b = str(da.split('/')[1])
            filename = "case_import"+(self.da_a+'-'+self.da_b).replace('-','.')+".xls"
            excel_path = os.path.dirname(os.path.abspath('.')) + 'config_filecase_import'
            self.ecl =os.path.join(excel_path,filename)
      
            book = xlwt.Workbook(encoding = 'utf-8')
            self.sheet1 = book.add_sheet('Sheet 1',cell_overwrite_ok = True)
            self.title = [u'进件号',u'批次号',u'批次名称',u'产品名称',u'贷款机构',u'产品类型',u'姓名',u'身份证',u'手机',u'年龄',u'性别'u'帐号',
                    u'卡号',u'逾期天数',u'账龄',u'手别'   ,u'最新欠款金额',u'委案金额',u'委案时间',u'退案时间',u'最近一次进入催收日期',
                     u'额度',u'案件地区',u'币种',u'开户行',u'账单日',u'开卡日期',u'是否分期',u'分期情况',u'本金',u'利息',u'违约金',
                     u'最低还款',u'委案最低还款额',u'争议金额',u'争议后金额',u'服务费',u'超限费',u'累计还款',u'委前最后付款额',u'委前最后付款日',
                    u'案件备注',u'家庭地址',u'家庭电话',u'公司名称',u'公司电话',u'公司地址',u'常用地址',u'账单地址',u'邮政编码',u'其他地址',
                     u'QQ',u'微信',u'支付宝',u'邮箱',u'联系人1姓名',u'联系人1关系',u'联系人1电话',u'联系人2姓名',u'联系人2关系',u'联系人2电话',
                     u'联系人3姓名',u'联系人3关系',u'联系人3电话']
      
            batch_code = ['SZ-GF-2018-06-20','SZ-GF-2018-06-20','SZ-GF-2018-06-20','SZ-GF-2018-06-20','SZ-GF-2018-06-20','SZ-GF-2018-06-20',
                          'SZ-GF-2018-06-20','SZ-GF-2018-06-20']
            commit_money = ['255','452','1223','452','52']
            self.commit_date = [self.da_a]
            latest_debt_money = ['255','452','1223','452','52']
            self.limit_date = ['2019-09-01','2019-05-01','2019-08-21','2019-02-01','2019-12-01','2019-09-25','2019-09-19',]
            self.product_type = ['信贷','消费金融','信用卡']
            self.borrower_idnumber = ['422325198908151539','620503198108111211','360103198904054718']
            self.borrower_phone = ['13686821736']
            self.loan_institution = ['天天测试银行']
      
      
            self.write_data(self.title,0,line=1)#标题内容和格式写入
      
      
            # 数据导入的条数
            data_num = 60000
            # 进件号写入
            bill_code = self.create_data_billcode(data_num)#获取5个随机字符
            = self.title_local(u'进件号')
            self.write_data(bill_code, j, line=0)#对第一列进行写入,写入字段存放在lrst中
            #批次号写入
            batch_codes = self.create_data(batch_code,data_num)
            = self.title_local(u'批次号')
            self.write_data(batch_codes, a, line=0)
            #委案金额写入
            commit_moneys = self.create_data(commit_money, data_num)
            = self.title_local(u'委案金额')
            self.write_data(commit_moneys, a, line=0)
            #最新欠款金额写入
            latest_debt_moneys = self.create_data(latest_debt_money, data_num)
            = self.title_local(u'最新欠款金额')
            self.write_data(latest_debt_moneys, a, line=0)
            #其它固定写入
            commit_dates, limit_dates, product_types, borrower_idnumbers, borrower_phones, loan_institutions = self.only_create_data(data_num)
            #委案时间写入
            aa = self.title_local(u'委案时间')
            self.write_data(commit_dates, aa, line=0)
            #退案时间写入
            bb = self.title_local(u'退案时间')
            self.write_data(limit_dates, bb, line=0)
            #产品类型写入
            cc = self.title_local(u'产品类型')
            self.write_data(product_types, cc, line=0)
            #身份证写入
            dd = self.title_local(u'身份证')
            self.write_data(borrower_idnumbers, dd, line=0)
            #手机号写入
            ee = self.title_local(u'手机')
            self.write_data(borrower_phones, ee, line=0)
            #贷款机构写入
            ff = self.title_local(u'贷款机构')
            self.write_data(loan_institutions, ff, line=0)
      
      
            #姓名写入
            = self.title_local(u'姓名')
            brrower_name = self.create_data_name(data_num)  # 获取5个随机字符
            self.write_data(brrower_name, i, line=0)
            book.save(self.ecl)
            return filename
        def write_data(self,lst,num,line=0):
            """
            :param lst: 写入的字段内容的列表
            :param num: num来控制写入的是固定第几行第几列
            :param line: 判断写入的是一行还是一列
            :return: none
            """
            if line == 0:
                for i,item in enumerate(lst):
                    self.sheet1.write(i+1, num, item)
            else:
                for i,item in enumerate(lst):
                    self.sheet1.write(num, i, item)
        def title_local(self,str):
            for i, item in enumerate(self.title):
                if item == str:
                    return i
      
        #进件号生成的随机算法
        def create_data_billcode(self,number):
            lrst=[]
            la = ['SZ','PH','HW','KL','WE','TY','DH','Z','H','W','L','E','Y','Q','SZK',
                  'PHK','HWK','KLK','WEK','TYK','DHK','SRZ','PRH','HRW','KRL','WRE','TRY',
                  'DRH','SLZ','PLH','HLW','KLL','WLE','TLY','DLH','SZL','PHL','HWL','KLL','WEL','TYL','DHL'
                                                                                                      'DRH''SLkZ''PkLH',
                  'HLkW''KLkL''WLkE''TLkY''DLkH''SkZL''PkHL''HWkL''KLkL''WEkL''TkYL''DkHL']
            la1 = ['SZ''PH''HW''KL''WE''TY''DH''Z''H''W''L''E''Y''Q''SZK',
                  'PHK''HWK''KLK''WEK''TYK''DHK''SRZ''PRH''HRW''KRL''WRE''TRY',
                  'DRH''SLZ''PLH''HLW''KLL''WLE''TLY''DLH''SZL''PHL''HWL''KLL''WEyL''TyYL''DyHL'
                                                                                                                    ,'DyRH',
                  'SLkZ''PkLH',
                  'HLkW''KLkL''WLkE''TLkY''DLkH''SkZL''PkHL''HWkL''KLkL''WEkL''TkYL''DkHL'
                                                                                                          'SZ''PH''HW',
                  'K2L''W2E''T2Y''D2H''2Z''2H''2W''2L''2E''2Y''2Q''2SZK',
                  'PHK''HWK''KLK''WEK''TYK''DHK''SRZ''PRH''HRW''KRL''WRE''TRY',
                  'DRH''SLZ''PLH''HLW''KLL''WLE''TLY''DLH''SZL''PHL''HWL''KLL''WEyL''TyYL',
      
      
      
      
      
      
                  ]
            for in range(1,number+1):
                = str(random.randint(01000000000000))
                for in la:
                    jk=j
                = random.choice(la1)
                ha = jk + '-' + self.da_a + '-' + i+j
                lrst.append(ha)
            return lrst
        #姓名生成的随机算法
        def create_data_name(self,number):
            lrst = []
            la = ['张''周''吴''谢''李''高''汤','曹''陈''欧阳''慕容''黄''袁''吕']
            lb = ['具''国''暮''各''色''形''者','换''与''欧''各''力''固''体',
                                        '为''而''尔''风''哦',
                  '形''黯''器''个''昂''瘦''力''刻''他']
            lc = ['深''和''落''省''彩''呈''的','谎''和''妔''给''彩''呈''的',
                                    '框''和''量''为''强',
                  '而''的''及''和''联''给''肉''开''费']
            for in range(1, number+1):
                = random.choice(la)
                = random.choice(lb)
                = random.choice(lc)
                ha = + + k
                lrst.append(ha)
            return lrst
      
        #其它数据生成算法
        def create_data(self,la,number):
            """
            :param la: 随机数列
            :param number: 生成几条数据
            :return: 数据写集合
            """
            lrst = []
            for in range(1, number+1):
                = random.choice(la)
                = str(random.randint(01000))
                ha = i+j
                lrst.append(ha)
            return lrst
        def only_create_data(self,data_num):
      
            commit_dates = []
            limit_dates = []
            product_types = []
            borrower_idnumbers = []
            borrower_phones = []
            loan_institutions = []
            latest_debt_moneys = []
            for in range(1,data_num+1):
                aa = random.choice(self.commit_date)
                bb = random.choice(self.limit_date)
                cc = random.choice(self.product_type)
                dd = random.choice(self.borrower_idnumber)
                ee = random.choice(self.borrower_phone)
                ff = random.choice(self.loan_institution)
                commit_dates.append(aa)
                limit_dates.append(bb)
                product_types.append(cc)
                borrower_idnumbers.append(dd)
                borrower_phones.append(ee)
                loan_institutions.append(ff)
            return commit_dates,limit_dates,product_types,borrower_idnumbers,borrower_phones,loan_institutions
      
        #将不是今天生成的文件删除
        def clear_file(self):
      
            da = time.strftime("%Y.%m.%d/%H-%M-%S", time.localtime())
            da_a = str(da.split('/')[0])
            path = os.path.dirname(os.path.abspath('.')) + 'config_filecase_import'
            lrst = []
            for file in os.listdir(path):
                if da_a not in file:
                    lrst.append(file)
            if len(lrst) == 0:
                logger.info("没有需要删除的历史文件")
            else:
                for file in lrst:
                    os.remove(os.path.join(path,file))
        #注意返回的了lsrt是包含标题的
        def get_data(self,module):
            lsrt = []
            line = self.title_local(module)
            ExcelFile = xlrd.open_workbook(self.ecl)
            sheet = ExcelFile.sheet_by_index(0)
            lsrt = sheet.col_values(line)#module列内容
            return lsrt
      
      
      
    if __name__ == '__main__':
        a=file_process()
        a.create_excel_file()
    努力努力努力
  • 相关阅读:
    GO语言面向对象06---面向对象练习01
    GO语言面向对象05---接口的多态
    GO语言面向对象04---接口的继承
    GO语言面向对象03---接口与断言
    GO语言面向对象02---继承
    Go语言练习---判断闰年以及根据现在的秒数求现在的年月日
    [操作系统] 线程管理
    [操作系统] 进程的状态
    [操作系统] 进程控制块
    关于这次计算机设计大赛
  • 原文地址:https://www.cnblogs.com/wwtest/p/14167991.html
Copyright © 2011-2022 走看看