pandas读取20W数据excel,每999行生成一个查询sql语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/s740556472/article/details/83341395

前言

工作中遇到一个小问题,Oralce数据库的查询是不能大于1000条in查询的,所以需要对文件进行切割。数据源是20w的excel数据,于是想到用pandas对其进行读取,然后每998行生成一个新的sql文件。

代码实现

# coding = utf-8

"""
@author: sy

@file: readexcel.py

@time: 2018/6/15 10:11

@desc:

"""
import pandas as pd

#from multiprocessing.dummy import Pool as ThreadPool
#from functools import partial 本想试下多线程


def read_data():
    short_data = pd.read_excel('C:/Users/sy/Desktop/split/data.xlsx', sheet_name='Sheet1')
    short_data = short_data.fillna(-1)
    sql_str = 'select t.policyno from xxxxx t where t.policyno in ('
    sum_sql = ''
    # pandas 读取的类型为DataFrame,也是可迭代的对象
    for i, excel_policy_no in enumerate(short_data['保单号']):
        sum_sql += "'" + str(excel_policy_no) + "',"
        if i != 0 and i % 997 == 0:
            sum_sql += "'" + str(excel_policy_no) + "');"
            sql = sql_str + sum_sql
            thread_function(i, sql)
            sum_sql = ''


def thread_function(i, sql):
    write_sql('C:/Users/sy/Desktop/split/' + str(i) + '.sql', sql)


def write_sql(filename, content):
    with open(filename, 'a', encoding='utf-8') as f:
        f.write(content)


if __name__ == '__main__':
    read_data()

总结

耗时多数在读取20W数据的时候,读取excel时,一次全读到内存中了,所以比较慢,像pandas自带的csv读取,可以进行分块读取。excel我查阅了相关官方文档,并没有看到相应属性,若有更好的方式欢迎留言讨论!

猜你喜欢

转载自blog.csdn.net/s740556472/article/details/83341395