txt 导入数据库mysql

如题,比如说有一些txt字段,想到导入数据库方便查找分类的话
utf-8就够了,只不过需要在代码里遇到错误处理下,比如跳过什么的
cmd cat 合并文件, sort去重
^(.?)\s(.?)$ 匹配空格间隔行

导入前最好分割下文件,导入几个表中,
目的是为了方便做索引和查找,不然会很卡。

 split -a 2 -d -b 1G all-s-u.txt child

其实navicat右键导入向导就可以了,在这之前最好做一个去重,否则插入效率很低(如果加了索引的话)
在这里插入图片描述

数据处理

0 合并前先判断文件类型

file *

1 合并当前文件夹所有文件
git bash

cat * > merged-file

2 找出重复的,排序

export LC_ALL='C'
sort r-sort.txt > r-sorted.txt

3 去重

uniq r-sorted.txt > r-sorted-unique.txt

或者直接 sort加去重

sort -u -t ' ' -k1,1  111.txt > 22.txt

去除无用数据
可以去除一些脏数据,加快插入效率

sed -i '/----/d' 111.txt

在这里插入图片描述

建表

CREATE TABLE `test_code` (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `user` varchar(191) DEFAULT NULL,
  `pass` varchar(191) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uername_index` (`user`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

最好不要唯一索引(影响插入速度?),正常B树索引就OK了
注意索引的长度,有191的限制

Python代码

import pymysql
import os

parent_path = "./xxxxxx"

db = pymysql.connect("localhost","root","root","main" )
#定义一个游标,以便获得查询对象。
cu = db.cursor()                     

def process_one_file(s):
    with open(s, 'r', encoding='utf-8', errors='ignore') as f:
        for line in f:
            # print(line)
             try:
                data_array = line.split("----")
                if(len(data_array) < 2):
                    continue
                user = data_array[0].strip()
                password = data_array[1]

                t.append((None, user, password))

                if(len(t) > 10000):
                    # print(t)
                    cu.executemany('replace into table_xxx (id, user, pass) values(%s, %s, %s)', t)
                    db.commit()
                    t = []
            except:
                continue

      

l = os.listdir(parent_path)
for each_path in l:
    # print()
    print("============ " + each_path)
    process_one_file(parent_path + "/" + each_path)

cu.close()      #关闭游标
db.close()      #关闭数据库

print("finised!")
input("sss")

注意

先设置mysql的username字段索引,也就是你要查询的字段。
代码是sqlite python的,但是发现sqlite太卡,不方便查询,(sqlite果然只适合做配置文件之类的啊,反正不能超过500M感觉)

需要换成mysql,代码就要换,用pymysql就行,mysql要用myisam,查询快。
在这里插入图片描述

图片引用文章并介绍了其他引擎
https://www.cnblogs.com/jepson6669/p/9853241.html

查询的时候不要用 LIKE "%xxxx%",慢死你。用这个"xxx%"
因为这个是可以利用索引的。

如图 explain下就看出来了
在这里插入图片描述
在这里插入图片描述
%xxx% 相当于遍历了整张表
xxx% 则是查询了索引 (B-tree),效率提升了几千倍

发布了258 篇原创文章 · 获赞 45 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/A13155283231/article/details/103758414
今日推荐