Python数据清洗:提取爬虫文本中的电话号码

python学习网 2020-08-28 11:31:18

 

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

效果展示

  • 原始数据
    在这里插入图片描述

  • 清洗数据
    在这里插入图片描述

注意事项

每个号码前面带‘+’,而原始文本中有些号码带Fax前缀,为传真号码,需要剔除掉

  • 剔除方法
    首先将文本全部转换为小写,再将’ fax’(注意fax前有空格)转换成’ Fax’,则只要遇到大写F就说明紧接着的号码是传真号码。
    接下来我们设置一个传真标志FaxFlg,默认值:0,遍历所有字符,一旦遇到了’F’,就将标志打开,表示下一个遇到的‘+’后面的号码我们需要舍弃掉,舍弃后又重新见FaxFlg设为0,继续遍历。

代码

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 18 09:46:30 2020

@author: Songyou Han
"""

import os
import csv

# 获取cvs文件列表函数
def file_name(file_dir):
    files = []
    for root, dirs, file in os.walk(file_dir):
        files = file #当前路径下所有非目录子文件
    return files

# 电话号码提取函数
def ExtractRawData(source='raw_datas',destination='extract_phone'):
    files = file_name(source)
    dict = {}
    for filename in files:
        file = source+"/"+filename
        datas = csv.reader(open(file,'r',encoding = "utf-8"))
        data_list = []
        for item in datas:
            data_list.append(item[0])
        dict.update({filename:data_list})
    return dict


def ExtractPhoneNumber(rawData):    
    PhoneNumbersDict = {}   
    for key,value in rawData.items():
        PhoneNumbersList = []
        for row in value:
            row = row.lower().replace(" fax"," Fax").replace(" ","")
            IndexList = []
            FaxFlg = 0
            for i in range(len(row)):
                if row[i] in ['F']:
                    FaxFlg = 1
                    continue
                if row[i] in ['+']:
                    if FaxFlg == 0:
                        IndexList.append(i)
                    else:
                        FaxFlg = 0
            
            PhoneNumbers = []
            for index in IndexList:
                i = index
                PhoneNumber = '+' # 存放单个电话号码的盒子
                while row[i+1] in ['0','1','2','3','4','5','6','7','8','9']:
                    PhoneNumber = PhoneNumber + row[i+1]
                    i += 1
                if PhoneNumber not in PhoneNumbers:
                    PhoneNumbersList.append(PhoneNumber)  
                    PhoneNumbers.append(PhoneNumber)
            print("从以下文本中提取到号码(已去重):"+str(PhoneNumbers))
            print("........................")
            print(row)
            print("========================")
        PhoneNumbersDict.update(
阅读(2457) 评论(0)