博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python asyncio 异步实现mongodb数据转xls文件
阅读量:5060 次
发布时间:2019-06-12

本文共 4622 字,大约阅读时间需要 15 分钟。

from pymongo import MongoClientimport asyncioimport xlwtimport jsonclass Mongodb_Transfer_Excel():    def __init__(self, db_name, table_name, ip='127.0.0.1', port=27017, excel_format=None, mongodb_type=None):        """        :param db_name: 数据库名        :param table_name: 数据表名        :param ip: IP        :param port: 端口        :param excel_format: 数据需求的字段:{'content': 0, 'field': 1}        """        self.ip = ip        self.port = port        self.db_name = db_name        self.table_name = table_name        self.excel_format = excel_format  # excel_format如:{'content': 0, 'field': 1}        self.wbk = xlwt.Workbook()        self.sheet = self.wbk.add_sheet(self.table_name)        self.mongodb_type = mongodb_type        self.loop = asyncio.get_event_loop()    def db_conn(self):        """        创建数据库连接        :return:        """        conn = MongoClient(self.ip, self.port)        db = conn[self.db_name]  # 连接mydb数据库,没有则自动创建        conn = db[self.table_name]  # 使用test_set集合,没有则自动创建        return conn    def find_data(self):        """        获取mongdb数据        :return:        """        rows = self.db_conn().find()        return rows    def create_excel(self):        """        根据self.excel_format生成execl        :return:        """        if self.excel_format:            excel_format = self.excel_format        else:            excel_format = {
'content': 0, 'content1': 1, 'title': 2, "weixin_code": 3, "weixin_name": 4, "type": 5, 'pubtime': 6} self.excel_format = excel_format for key, value in excel_format.items(): self.sheet.write(0, value, key) self.wbk.save('{}.xls'.format(self.table_name)) async def parse_rows(self, i, row): dic = dict() dic['cloumn'] = i if 'user' in row: user_info = row.get('user') if 'description' in user_info: dic['description'] = user_info['description'] if 'screenName' in user_info: dic['screenName'] = user_info['screenName'] if 'result' in row: result = row['result'] if isinstance(result, str): result = json.loads(result) content = result.get('content').replace('\n', '') if len(content) > 2000: dic['content'] = content[0: 2000] dic['conten1'] = content[2000: ] else: dic['content'] = content if 'title' in result: dic['title'] = result.get('title') if 'event' in result: event = result.get('event') if isinstance(event, str): event = json.loads(event) if 'weixin_code' in event: dic['weixin_code'] = event.get('weixin_code') if 'weixin_name' in event: dic['weixin_name'] = event.get('weixin_name') if 'type' in event: dic['type'] = event.get('type') if 'url' in event: dic['url'] = event.get('url') if 'pubtime' in result: dic['pubtime'] = result.get('pubtime') await asyncio.sleep(1) self.parse_dic(dic) def parse_dic(self, dic): for key, value in dic.items(): if key in self.excel_format: # print(key) self.write_excel(key, value, dic['cloumn']) def write_excel(self, key, value, columns): """ 写入数据 :param dic: 数据字典 :param columns: 插入excel的行 :return: """ self.sheet.write(columns, int(self.excel_format.get(key)), value) def save_excel(self): self.wbk.save('{}.xls'.format(self.table_name)) def run(self): self.create_excel() rows = self.find_data() tasks = [self.parse_rows(i + 1, row) for i, row in enumerate(rows)] self.loop.run_until_complete(asyncio.wait(tasks)) self.loop.close() self.save_excel()if __name__ == '__main__': excel_format = {} # 指定excel文件格式如:{'content': 0, 'field': 1} mongodb_type = 'weibo' # 或者man_sheng_huo obj = Mongodb_Transfer_Excel(db_name='db_name', table_name='table_name', mongodb_type=mongodb_type, excel_format=excel_format) obj.run()

 

转载于:https://www.cnblogs.com/shiluoliming/p/8694986.html

你可能感兴趣的文章
大话数据结构(七)——单链表的整表创建与删除
查看>>
nodejs安装
查看>>
StringBulider简单用法
查看>>
Java笔记(十四) 并发基础知识
查看>>
发送短信验证码
查看>>
虚拟地址 线性地址 物理地址 傻傻分不清楚?
查看>>
位置与地图(三)给地图加入覆盖层
查看>>
Activiti的简单入门样例(经典的请假样例)
查看>>
关于Hibernate的一个简单小程序
查看>>
设计模式开发实际应用场景对应
查看>>
谢宝友:会说话的Linux内核
查看>>
e课表项目第二次冲刺周期第三天
查看>>
css display:none使用注意事项小结
查看>>
搭建git服务器
查看>>
uva11636 Hello World!
查看>>
【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集
查看>>
JavaScript中String对象的一些方法
查看>>
IO_字符流输出
查看>>
系统管理命令
查看>>
How to activate Microsoft SQL Server 2012 evaluation
查看>>