使用 Python 处理3万多条数据只要几秒钟


Posted in Python onJanuary 19, 2020

应用场景:工作中经常遇到大量的数据需要整合、去重、按照特定格式导出等情况。如果用 Excel 操作,不仅费时费力,还不准确,有么有更高效的解决方案呢?

本文以17个 txt 文本,3万多条数据为例,使用 Python 连接 MySQL 数据库,实现快速操作。

别人加班干的活,我的 Python 小助手几秒钟就搞定了!

本文主要包括以下三方面内容:

  • 数据写入
  • 数据去重
  • 数据导出

将数据写入 MySQL 数据库

下图所示文件是本文的数据源:

使用 Python 处理3万多条数据只要几秒钟 

我们的设想是:编写一个小程序,扔在这个文件夹里,双击后就可以自动读取每个 txt 文档中的数据,并写入数据库。

代码如下:

import pymysql
import os
conn = pymysql.connect(host='localhost', user='root', password='123456', db='qq', charset='utf8')
cur = conn.cursor()
cur.execute("CREATE TABLE qq ( id int(5) NOT NULL auto_increment, qq varchar(20)NOT NULL, PRIMARY KEY (id));")
conn.commit()
path = os.getcwd()
files = os.listdir(path)
i = 0
for file in files:
 f = open(file,'r',encoding = 'UTF-8')
 next(f)
 for line in f:
 i += 1
 #print(line)
 sql = "insert into qq(qq) values(%s);"
 cur.execute(sql,line)
 print("插入第", i, "条数据!")
 conn.commit()
 f.close()
cur.close()
conn.close()

运行效果:

使用 Python 处理3万多条数据只要几秒钟 

重点代码解释:

这段代码用到了 pymysql 和 os 两个库。

  • pymysql:用来操作 MySQL 数据库;
  • os:用来遍历所在文件夹下的所有文件。

现将主要代码解释如下:

1、遍历任意文件夹下所有文件名称
程序写好后,使用 pyinstaller 打包成 exe 程序,并放在要操作的文件夹下面。

通过 path = os.getcwd() 命令,获取该 exe 文件所在目录。

通过 files = os.listdir(path) 命令,获取 exe 文件所在目录下的所有文件名称,并存入 files 列表中。

这样我们就获得了所有的 txt 文件名称,你可以任意命名你的 txt 文件名,程序都能读出来。

2、将数据写入数据库

(1)连接数据库,并在数据库中创建新表

A. 连接到我的 qq 数据库

conn = pymysql.connect(host='localhost', user='root', password='123456', db='qq', charset='utf8')

B. 创建新表 qq

在 qq 数据库中创建新表,表名称为 qq ,包含 2 个字段:id 字段为主键、自动递增;qq 字段为字符型,用于存储数据。

cur.execute("CREATE TABLE qq ( id int(5) NOT NULL auto_increment, qq varchar(20)NOT NULL, PRIMARY KEY (id))")

(2)将数据写入数据库

这里使用了两层循环:

for file in files:
 f = open(file,'r',encoding = 'UTF-8')
 next(f)
 for line in f:
 i += 1
 #print(line)
 sql = "insert into qq(qq) values(%s);"
 cur.execute(sql,line)
 print("插入第", i, "条数据!")
 conn.commit()
 f.close()

第一层循环是用来依次打开上述 17 个 txt 文件。

第二层循环是依次读取每个 txt 文件的每一行,并将改行数据插入数据库表 qq 的 qq字段。

至此就完成了数据的导入,总共32073条数据。

使用 Python 处理3万多条数据只要几秒钟 

数据清洗

这里以去除重复值为例,简单介绍一下数据清洗。

1、创建一个新表,用来存储清洗后的数据

可以在 cmd 窗口下登陆 MySQL,打开 qq 数据库,执行下列操作:

CREATE TABLE qq_dist ( id int(5) NOT NULL auto_increment, qq varchar(20)NOT NULL, PRIMARY KEY (id));

这样就创建了新表 qq_dist ,用来存储清洗后的数据,便于后期调用。

2、清洗数据

登陆 MySQL 后,执行下列操作:

insert into qq_dis(qq) select distinct qq from qq;

将从 qq 表中查找出的不重复的 qq 字段内容,插入到 qq_dist 表中的 qq 字段。

将数据按照特定格式导出

案例:将清洗后的数据的第101-200行导出到新的 txt 文本中。

代码如下:

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', db='wxid', charset='utf8')
print("写入中,请等待……")
cur = conn.cursor()
sql = "select wxid from wd_dis limit 100,100;"
cur.execute(sql)
conn.commit()
alldata = cur.fetchall()
f = open('data101-200.txt','a')
i = 0
for data in alldata:
 i += 1
 f.write(data[0])
 f.flush()
f.close
cur.close()
conn.close()
print("写入完成,共写入{}条数据!".format(i))

重点代码解释:

1、 limit

MySQL 中 limit m,n 函数的含义是:从第 m+1 行开始读取 n 行。

所以,本案例中读取第101-200行,就是 limit 100,100

2、flush()

flush() 函数一定要加上,它可以将缓冲区的数据写入文件中。否则就会出现生成的 txt 文档为空白的错误。

总结

以上所述是小编给大家介绍的使用 Python 处理3万多条数据只要几秒钟,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
使用python在校内发人人网状态(人人网看状态)
Feb 19 Python
python端口扫描系统实现方法
Nov 19 Python
python开发之str.format()用法实例分析
Feb 22 Python
详解Python函数作用域的LEGB顺序
May 14 Python
python模块之re正则表达式详解
Feb 03 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
python读取并写入mat文件的方法
Jul 12 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
Python openpyxl模块原理及用法解析
Jan 19 #Python
Python imutils 填充图片周边为黑色的实现
Jan 19 #Python
python opencv 实现对图像边缘扩充
Jan 19 #Python
python给图像加上mask,并提取mask区域实例
Jan 19 #Python
python实现在一个画布上画多个子图
Jan 19 #Python
python构造函数init实例方法解析
Jan 19 #Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 #Python
You might like
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
实例讲解php实现多线程
2019/01/27 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
计算机系本科生求职信
2014/05/31 职场文书
单位考核聘任报告
2015/03/02 职场文书
电影雨中的树观后感
2015/06/15 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书