python正则表达式,提取命中mongo中的数据

来源:互联网 发布:外国人在中国用淘宝吗 编辑:程序博客网 时间:2024/06/11 17:52

Mongo与Mysql以及sql server都是提供命令行检索方式的。那么问题来了,我们为什么还要使用Python去连接、访问以及操作这些数据库呢?

原因有很多,其中较为重要的一点是python是检索并连接数据库(诸如,Mongo/Mysql/Sql server等)与外部文件系统(诸如,csv/excel/json/txt等)的桥梁。

1.连接数据库
使用起来简单方便,使用的是python中的MongoClient包。如果你机器上没有安装,就使用pip install MongoClient安装一下。

给出数据库存储机器的ip,端口号。MongoDB默认的端口号是27017。

这里访问数据库data,可以直接在连接的时候通过方括号访问。

其实,你只要会python,只要连上了数据库,根本无需知道MongoDB自带的一些查询命令就可以轻松使用该数据库。只要这句:

for item in db.get_collection('concise').find():

这条语句是是无条件查询并返回mongodb中的concise这个collection内所有的记录。这个返回值是以字典的形式return的,接下来的许多操作,本质上都是python操作字典这个数据结构。

import pandas as pdimport refrom pymongo import MongoClientdb = MongoClient('192.168.112.167',27017)['data']data = []for item in db.get_collection('concise').find():    new = {}    aimed_Tag = set()    for keyword in keywords:        pattern = re.compile('.*'+keyword+'.*')        if 'desc' in item and pattern.match(str(item['desc'])) is not None:            aimed_Tag.add(keyword)        elif 'tagset' in item and pattern.match(str(item['tagset'])) is not None:            aimed_Tag.add(keyword)    if len(aimed_Tag) > 0:        new['_id'] = str(item['_id'])        new['aimed_Tag'] = aimed_Tag        data.append(new)print(len(data))     

2.正则表达式进行模糊匹配
正则表达式本身功能非常强大,也不是几句话,几次实践就能全部了解的。结合工作中常用到的功能给大家简单举个例子。

比如我们的诉求是找出包含了一下关键词的记录,并打印命中的关键词。做法是
(1)构建一个正则模式pattern,这个模式的含义是中间是关键词组,不管两边是什么东西,都算是命中。
(2)用这个模式pattern去匹配字符串。可以想象一排抽屉摆在那里,你手里拿着一串钥匙(类比pattern)一个一个去试开,只要开开一个就算成功。

keywords = ['正义','民族','英雄','科学发展']for keyword in keywords:    pattern = re.compile('.*'+keyword+'.*')    if pattern.match(str(item['desc'])) is not None:        print(keyword)    else:        continue

今天冬至了。晚上天儿真冷。
周五,下班回家。
2017/12/22

“数据分析师手记”微信公众号。欢迎关注
这里写图片描述

原创粉丝点击