导出mysql内数据 python建倒排索引
根据mysql内数据,python建倒排索引,再导回mysql内。
先把mysql内的数据导出,先导出为csv文件,因为有中文,直接打开csv文件会乱码,再直接改文件的后缀为txt,这样打开时不会是乱码,在第一行输入列名

保存时选另存为,将编码格式改为utf-8
这是建倒排索引时的代码(sort列没有空格和逗号) 运行是会报一个warning,但是结果没问题,代码结合了网络搜索结果,和我自己的修改,引用自:
https://blog.csdn.net/luoganttcc/article/details/89843699
https://github.com/luogantt/recommend_sys/blob/master/Inverted_index/invert_indexx.py 多谢分享!
from pprint import pprint
import pandas as pd
df = pd.read_csv("C:/Users/caiweiwen/Desktop/index_poem_dynasty.txt")
df['id'] = ' '
df['dynasty'] = ' '
all_dynasty = dict()
for i in range(len(df['poemid'])):
df['id'][i] = str(df['poemid'][i])
df['dynasty'][i] = "".join(str(df['dyn'][i]).split("朝代:"))
all_dynasty[df['dynasty'][i]] = 1
for dyn in all_dynasty.keys():
temp = []
for i in range(len(df['id'])):
if dyn == df['dynasty'][i]:
temp.append(df['id'][i])
all_dynasty[dyn] = temp
pprint(all_dynasty)
for sort in all_dynasty.keys():
with open('index_poem_dynasty.csv', 'a+', encoding='utf-8-sig') as f:
f.write(sort + ':'+','.join(all_dynasty[sort])+'\n')
还有更复杂一点的诗歌标签的倒排索引:
from pprint import pprint
import pandas as pd
docu_set = dict()
df = pd.read_csv("C:/Users/caiweiwen/Desktop/index_poem_sort.txt")
key = ""
value = ""
for i in range(42440): #数据问题,之后的数据id和sort之间会换行
key = str(df['poemid'][i])
value = str(df['sort'][i]).split( ) #去掉每个sort里的空格,返回列表
docu_set[key]=value
print(key)
print(value)
tmp = []
for i in range(42439,len(df['poemid'])):
if(df['poemid'][i].isdigit()): #判断是否为数字,是则为id
key = df['poemid'][i]
docu_set[key] = tmp
else:
tmp.append("".join(str(df['poemid'][i]).split())) #先去掉sort里的空格,因为返回的列表项是列表,列表项应为string,所以又转为string
if(df['poemid'][i+1].isdigit()): #判断下一行是否为数字
docu_set[key] = tmp
print("key:" + key)
print("value:" + str(tmp))
tmp = []
pprint(docu_set) #输出字典
all_words = dict()
for i in docu_set.values():
for j in i:
all_words[j] = 1
print(all_words.keys())
invert_index = dict()
for b in all_words.keys():
temp = []
for j in docu_set.keys():
if b in docu_set[j]:
temp.append(j)
invert_index[str(b)] = temp
pprint(invert_index)
for sort in invert_index.keys():
with open('index_poem_sort.csv', 'a+', encoding='utf-8-sig') as f:
f.write(sort + ':'+','.join(invert_index[sort])+'\n')
倒排结果:

导入时选择txt文件的形式

栏位分隔符我选择其他符号,我用冒号“ :”,视自己的具体情况而定,这样选源栏位和目标栏位时就很清晰了

最后的成果:

总结:
刚开始还是走了很多弯路,用dataframe和它自带的建索引,结果不知道怎么用,还是上网搜了倒排索引的python代码后才知道该用什么数据类型,幸好看到的第一个就是对的哈哈哈,
以前第一次做android的时候就花了很多时间查百度都没对,问了大佬才知道要先系统地学习一遍。以后不知道怎么写的时候还是直接搜要做的内容吧,按自己的想法搜数据结构或者算法要
花很多时间。
导出mysql内数据 python建倒排索引的更多相关文章
- 使用Python3导出MySQL查询数据
整理个Python3导出MySQL查询数据d的脚本. Python依赖包: pymysql xlwt Python脚本: #!/usr/bin/env python # -*- coding: utf ...
- Python导出MySQL数据库中表的建表语句到文件
为了做数据对象的版本控制,需要将MySQL数据库中的表结构导出成文件进行版本化管理,试写了一下,可以完整导出数据库中的表结构信息 # -*- coding: utf-8 -*- import os i ...
- linux下用命令导出mysql表数据
由于数据库服务器是内网环境,只能通过linux跳板机连接,所以navicat工具暂时用不上. 1.用Xshell工具连接跳板机 2.再通过跳板机连接数据库服务器 >ssh -p port ip ...
- 导出mysql数据库数据
1.phpmyadmin导出 ) AS `a` LEFT JOIN ( SELECT * FROM `newerp_jifen_order_log` WHERE `content` = '客户确认收货 ...
- shell导出mysql部分数据
#!/bin/shSYSTEM=`uname -s` echo "echo"$SYSTEM if [[ $SYSTEM = "Linux" ]]; then ...
- 使用MySQL的SELECT INTO OUTFILE ,Load data file,Mysql 大量数据快速导入导出
使用MySQL的SELECT INTO OUTFILE .Load data file LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.当用户一前一后地使用SELECT ...
- linux下导入、导出mysql数据库命令 下载文件到本地
一.下载到本地 yum install lrzsz sz filename 下载 rz filename 上传 linux下导入.导出mysql数据库命令 一.导出数据库用mysqldump命 ...
- PHPExcel使用-使用PHPExcel导出文件-导出MySQL数据
现在数据库里面有一组数据,我们将它按照不同的难度进行分sheet. 首先我们需要写一个mysql的配置文件- db.config.php(utf-8编码) : <?php $dbconfig= ...
- mysql的数据导出方法
mysql的数据导出几种方法 从网上找到一些问题是关于如何从MySQL中导出数据,以便用在本地或其它的数据库系统之上:以及 将现有数据导入MySQL数据库中. 数据导出 数据导出主要有以下几种方法 ...
随机推荐
- python中,*args和**kwargs这两个参数的作用是什么?
*args和**kwargs这两个都是不定长参数,可以解决函数中参数不固定的问题,*args可以把位置参数转化成元组,**kwagrs可以把关键字参数转化成字段
- STM32入门系列-GPIO工作模式及LED电路原理
GPIO工作模式 由于GPIO内部的结构关系,决定了GPIO可配置成以下几种模式. 输入模式 在输入模式时,施密特触发器打开,输出被禁止.可通过输入数据寄存器GPIOx_IDR读取I/O状态.输入模式 ...
- STM32入门系列-创建寄存器模板
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件 ...
- 基于flask的python注册到eureka
Eureka架构中的三个核心角色: 服务注册中心 Eureka的服务端应用,提供服务注册和发现功能,就是刚刚我们建立的eureka-demo 服务提供者 提供服务的应用,可以是SpringBoot应用 ...
- Java实现评论回复功能
目录 一.分类方式 1.单一型 2.嵌套型 3.两层型 二.实现原理 1.单一型 2.嵌套型 3.两层型 使用递归循环开发评论回复功能,适用于大部分的简单单体应用 评论功能或许是大多数的单体应用之中会 ...
- QQ彩贝热销时装
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 正式班D26
2020.11.11星期三 正式班D26 目录 14.2.2 ifconfig命令 14.2.2 ifconfig命令 ifconfig命令结果解释 [root@ccc ~]# ifconfig et ...
- 设置layui表格cell的内边距
/*设置layui表格cell的内边距*/ .layui-table-cell { height: 50px !important; line-height: 50px !important; }
- django环境安装操作整理!
1. Django 下载地址:https://www.djangoproject.com/download/ 注意:目前 Django 1.6.x 以上版本已经完全兼容 Python 3.x. 2.安 ...
- kali中PHANTOM-EVASION 3.0运行时module ' OpenSSL.crypto' has no attribute ' PKCS12Type'报错解决方法
kali中直接用pip install pyopenssl安装当最新的openssl中的crypto中的类PKCS12Type改成了PKCS12 所以需要在phantom中改对应代码 将这个文件中对应 ...