很多人学习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({key:PhoneNumbersList})
return PhoneNumbersDict def WritePhone(FileName,PhoneNumbersList):
f = open('extract_phone/(号码抽取)'+FileName,'w+')
for phone in PhoneNumbersList:
f.write("'"+phone+"'")
f.write("\n")
f.close() rawData = ExtractRawData('raw_datas','extract_phone')
PhoneNumbersDict = ExtractPhoneNumber(rawData)
print("\n\n小伙子,你的电话号码提取完了,现在开始存入extract_phone文件夹中。。。。。。\n")
for key,value in PhoneNumbersDict.items():
WritePhone(key,value)
print("存入文件:\t(号码抽取)"+str(key))
print("\n存好了!!!")

Python数据清洗:提取爬虫文本中的电话号码的更多相关文章

  1. python学习笔记——爬虫学习中的重要库urllib

    1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...

  2. 【python】提取sql语句中的表名

    前言 最近刚学python,写一个小工具时需要提取sql语句中表名,查询一番后找到一篇文章挺不错的,mark一下 PS.那篇文章是转载的,且没有标注转载自哪里 正文 import ply.lex as ...

  3. Python:Scrap爬虫过程中遇到的各种错误

    1.KeyError: 'Spider not found: BDS' 原因:settings.py中缺少了几项与spider名字配置相关的项: BOT_NAME = 'BDS' SPIDER_MOD ...

  4. NLP(十五)让模型来告诉你文本中的时间

    背景介绍   在文章NLP入门(十一)从文本中提取时间 中,笔者演示了如何利用分词.词性标注的方法从文本中获取时间.当时的想法比较简单快捷,只是利用了词性标注这个功能而已,因此,在某些地方,时间的识别 ...

  5. 用python正则表达式提取字符串

    在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣的可以看re的教程. 提取一般分两种 ...

  6. python正则表达式提取字符串

    用python正则表达式提取字符串 在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣 ...

  7. Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)

    原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...

  8. 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

    本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...

  9. NLP入门(十一)从文本中提取时间

      在我们的日常生活和工作中,从文本中提取时间是一项非常基础却重要的工作,因此,本文将介绍如何从文本中有效地提取时间.   举个简单的例子,我们需要从下面的文本中提取时间: 6月28日,杭州市统计局权 ...

随机推荐

  1. bzoj 3436小K的农场

    3436: 小K的农场 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2327 Solved: 1105 [Submit][Status][Discu ...

  2. JS&ES6学习笔记(持续更新)

    ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...

  3. SeekBar滑动时,progress数值不连续

    问题描述 logcat 你是否也遇见过这样的情况,SeekBar的进度不连续 这是我在做一个编辑图片的APP时,观察我打印的log,发现progress不是连续的 这时候可能就有人问:是你代码写的不对 ...

  4. nvidia-smi:控制您的GPU

    翻译  https://www.microway.com/hpc-tech-tips/nvidia-smi_control-your-gpus/ 大多数用户知道如何检查其CPU的状态,查看多少系统内存 ...

  5. 2 DC电参数测试 (1)

    基本常识: (1)Hot switch好的程序应避免使用热切换(这里热的含义类似于热插拔的“热“),热切换是指带点操作,有电流的情况下断开开关或闭合开关的瞬间,有电流通过,这会减少开关的寿命甚至直接损 ...

  6. Java日志框架(二)

    最流行的日志框架解决方案 按笔者理解,现在最流的日志框架解决方案莫过于SLF4J + LogBack.其有以下几个优点: LogBack 自身实现了 SLF4J 的日志接口,不需要 SLF4J 去做进 ...

  7. ConHost.exe机制

  8. Java高级篇 JVM

    JVM是什么? JVM起了什么作用? JVM包含了什么? JVM中, 一个类 程序是怎么加载的? JVM中垃圾回收机制?

  9. import android.support.annotation.NonNull;报错

    将import android.support.annotation.NonNull;换成import androidx.annotation.NonNull;

  10. Go语言入门系列(五)之指针和结构体的使用

    Go语言入门系列前面的文章: Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 1. 指针 如果你使用过C或C++,那你肯定对指针这个概念 ...