使用 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编程中的包结构
Oct 25 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
python 网络编程详解及简单实例
Apr 25 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
Python封装原理与实现方法详解
Aug 28 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python实现批量注册网站用户的示例
Feb 22 Python
Python字符串的一些操作方法总结
Jun 10 Python
python3 字符串知识点学习笔记
Feb 08 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
基于python图像处理API的使用示例
Apr 03 Python
python安装第三方库如xlrd的方法
Oct 31 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python3编码问题汇总
2016/09/06 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
对Python信号处理模块signal详解
2019/01/09 Python
详解python pandas 分组统计的方法
2019/07/30 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
Python3如何判断三角形的类型
2020/04/12 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
商场拾金不昧表扬信
2014/01/13 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
先进个人事迹材料
2014/12/29 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
公司承诺书格式范文
2015/04/28 职场文书
初中班主任教育随笔
2015/08/15 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android