程语欣 发表于 2018-1-30 17:58

央·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()

效果图:



附件:

没有验证码 发表于 2018-1-30 18:19

附件的名字让我感到莫名奇妙的恐慌,肿么办{:301_977:}

52P 发表于 2018-1-30 19:13

然后。。。?

苏歌寒 发表于 2018-1-30 20:48

做数据分析?

IrvingYang 发表于 2018-1-30 23:28

楼主的附件很皮{:1_918:}

葫芦炒鸡蛋 发表于 2018-1-31 10:37

赶问楼主用的什么IDE,黑色的那个

小黑LLB 发表于 2019-2-1 14:50

写的不错,还有IDLE好评{:1_921:}

jxfzlin 发表于 2019-3-23 13:06

好,下载使用

liangyun 发表于 2019-4-29 10:14

帮你节约大半代码量且优化效率并修复部分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:密码为中文时会验证通过不解决了,过滤中文显得代码太长了,网上一百度就有

liangyun 发表于 2019-4-29 10:17


帮你节约大半代码量且优化效率并修复部分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
查看完整版本: 央·python编程之QQ数据清洗