使用 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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python中使用item()方法遍历字典的例子
Aug 26 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
python实现定时提取实时日志程序
Jun 22 Python
TensorFlow实现Logistic回归
Sep 07 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
利用python实现后端写网页(flask框架)
Feb 28 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 mssql 时间格式问题
2009/01/13 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
浅探express路由和中间件的实现
2019/09/30 Javascript
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
flask 实现token机制的示例代码
2019/11/07 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
Python用SSH连接到网络设备
2021/02/18 Python
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
村委会主任先进事迹
2014/01/15 职场文书
新员工入职感言
2014/02/01 职场文书
校园活动宣传方案
2014/03/28 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
教育教学读书笔记
2015/07/02 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
Python深度学习之实现卷积神经网络
2021/06/05 Python
我去timi了,一起去timi是什么意思?
2022/04/13 杂记