央·python编程之QQ数据清洗
一般我们从网上下下来的数据都很杂乱的,什么样的情况都有,不利于我们整理,所以在拿到数据的时候我们会先做一遍数据清理,把垃圾数据清理掉。今天我们拿QQ数据做示范。
我们命令行是怎么看数据!
more zy.txt
#然后空格进行翻页
效果如图:
从数据中得知:
---- 中间4个-
左边是账号,右边是密码
目前QQ最多就11位,密码最长16位,所以数据中位数最多31位(4+11+16),大于的都是垃圾(第一轮筛选)
我先用python 读取QQ操作
import codecs
filepath=r"C:\Users\Administrator\Desktop\zy.txt"
file=codecs.open(filepath,"rb","gbk","ignore")#按照指定编码
mylist=file.readlines()#返回一个list,读取到内存
#savefilepath="C:\Users\Administrator\Desktop\zy1.txt"
for line in mylist:
QQlist=line.split('----')
print(QQlist)
注:此方法是读取到内存,所以很占空间,会很卡。
数据中我们看到很多垃圾数据,我们看下垃圾数据
import codecs
filepath=r"C:\Users\Administrator\Desktop\zy.txt"
file=codecs.open(filepath,"rb","gbk","ignore")#按照指定编码
mylist=file.readlines()#返回一个list,读取到内存
#savefilepath="C:\Users\Administrator\Desktop\zy1.txt"
for line in mylist:
QQlist=line.split('----')
if len(line)>31:
print(line)#打印垃圾数据
进行QQ清洗,在分别保存账号文本和密码文本。
import codecs
filepath=r"C:\Users\Administrator\Desktop\zy.txt"
file=codecs.open(filepath,"rb","gbk","ignore")#按照指定编码
mylist=file.readlines()#返回一个list,读取到内存
savegoodfilepath=r"C:\Users\Administrator\Desktop\zyQQGood.txt"
savebadfilepath=r"C:\Users\Administrator\Desktop\zyQQbad.txt"
filegood=open(savegoodfilepath,"wb")
filebad=open(savebadfilepath,"wb")
forlineinmylist:
iflen(line)>31 or len(line)<=15:#(4+5+6)
filebad.write(line.encode("utf-8"))
else:
QQlist = line.split('----')
iflen(QQlist)==2:
filegood.write(line.encode("utf-8"))
else:
filebad.write(line.encode("utf-8"))
filebad.close()
filegood.close()
效果图:
附件: 附件的名字让我感到莫名奇妙的恐慌,肿么办{:301_977:} 然后。。。? 做数据分析? 楼主的附件很皮{:1_918:} 赶问楼主用的什么IDE,黑色的那个 写的不错,还有IDLE好评{:1_921:} 好,下载使用 帮你节约大半代码量且优化效率并修复部分bug。。。temp.py import re
with open('1.txt', 'r', encoding='utf8') as f, \
open('2.txt', 'w', encoding='utf8')as f2, \
open('3.txt', 'w', encoding='utf8')as f3:
for line in f.readlines():
t = re.findall('(\\d{5,11}----\\w{6,16})', line.strip('\n'))
f2.write(t + '\n' if t else '')
f3.write(line if not t else '')
1.txt 12abc----123456...
1----12345678901234567890
123456789987654321----2
1.23----45678
1234567----789456fgdd
你好我是小言----你好我也是小言
123456789----你好我还是小言剩下两个会自动创建已知bug:密码为中文时会验证通过不解决了,过滤中文显得代码太长了,网上一百度就有
帮你节约大半代码量且优化效率并修复部分bug。。。
#### temp.py
```python
import re
with open('1.txt', 'r', encoding='utf8') as f, \
open('2.txt', 'w', encoding='utf8')as f2, \
open('3.txt', 'w', encoding='utf8')as f3:
for line in f.readlines():
t = re.findall('(\\d{5,11}----\\w{6,16})', line.strip('\n'))
f2.write(t + '\n' if t else '')
f3.write(line if not t else '')
```
#### 1.txt
```txt
12abc----123456...
1----12345678901234567890
123456789987654321----2
1.23----45678
1234567----789456fgdd
你好我是小言----你好我也是小言
123456789----你好他们都叫我凉云
```
剩下两个会自动创建
已知bug:密码为中文时会验证通过
不解决了,过滤中文显得代码太长了,网上一百度就有
页:
[1]
2