使用 Python 处理3万多条数据只要几秒钟
应用场景:工作中经常遇到大量的数据需要整合、去重、按照特定格式导出等情况。如果用Excel操作,不仅费时费力,还不准确,有么有更高效的解决方案呢?
本文以17个txt文本,3万多条数据为例,使用Python连接MySQL数据库,实现快速操作。
别人加班干的活,我的Python小助手几秒钟就搞定了!
本文主要包括以下三方面内容:
- 数据写入
- 数据去重
- 数据导出
将数据写入MySQL数据库
下图所示文件是本文的数据源:
我们的设想是:编写一个小程序,扔在这个文件夹里,双击后就可以自动读取每个txt文档中的数据,并写入数据库。
代码如下:
importpymysql importos conn=pymysql.connect(host='localhost',user='root',password='123456',db='qq',charset='utf8') cur=conn.cursor() cur.execute("CREATETABLEqq(idint(5)NOTNULLauto_increment,qqvarchar(20)NOTNULL,PRIMARYKEY(id));") conn.commit() path=os.getcwd() files=os.listdir(path) i=0 forfileinfiles: f=open(file,'r',encoding='UTF-8') next(f) forlineinf: i+=1 #print(line) sql="insertintoqq(qq)values(%s);" cur.execute(sql,line) print("插入第",i,"条数据!") conn.commit() f.close() cur.close() conn.close()
运行效果:
重点代码解释:
这段代码用到了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("CREATETABLEqq(idint(5)NOTNULLauto_increment,qqvarchar(20)NOTNULL,PRIMARYKEY(id))")
(2)将数据写入数据库
这里使用了两层循环:
forfileinfiles: f=open(file,'r',encoding='UTF-8') next(f) forlineinf: i+=1 #print(line) sql="insertintoqq(qq)values(%s);" cur.execute(sql,line) print("插入第",i,"条数据!") conn.commit() f.close()
第一层循环是用来依次打开上述17个txt文件。
第二层循环是依次读取每个txt文件的每一行,并将改行数据插入数据库表qq的qq字段。
至此就完成了数据的导入,总共32073条数据。
数据清洗
这里以去除重复值为例,简单介绍一下数据清洗。
1、创建一个新表,用来存储清洗后的数据
可以在cmd窗口下登陆MySQL,打开qq数据库,执行下列操作:
CREATETABLEqq_dist(idint(5)NOTNULLauto_increment,qqvarchar(20)NOTNULL,PRIMARYKEY(id));
这样就创建了新表qq_dist,用来存储清洗后的数据,便于后期调用。
2、清洗数据
登陆MySQL后,执行下列操作:
insertintoqq_dis(qq)selectdistinctqqfromqq;
将从qq表中查找出的不重复的qq字段内容,插入到qq_dist表中的qq字段。
将数据按照特定格式导出
案例:将清洗后的数据的第101-200行导出到新的txt文本中。
代码如下:
importpymysql conn=pymysql.connect(host='localhost',user='root',password='123456',db='wxid',charset='utf8') print("写入中,请等待……") cur=conn.cursor() sql="selectwxidfromwd_dislimit100,100;" cur.execute(sql) conn.commit() alldata=cur.fetchall() f=open('data101-200.txt','a') i=0 fordatainalldata: i+=1 f.write(data[0]) f.flush() f.close cur.close() conn.close() print("写入完成,共写入{}条数据!".format(i))
重点代码解释:
1、limit
MySQL中limitm,n函数的含义是:从第m+1行开始读取n行。
所以,本案例中读取第101-200行,就是limit100,100
2、flush()
flush()函数一定要加上,它可以将缓冲区的数据写入文件中。否则就会出现生成的txt文档为空白的错误。
总结
以上所述是小编给大家介绍的使用Python处理3万多条数据只要几秒钟,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。