版权声明:本文为博主原创文章,未经博主允许不得转载。 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我查阅了相关官方文档,并没有看到相应属性,若有更好的方式欢迎留言讨论!