导入存储过程不是制定格式的字符串怎么写_Python实战 —— 正则表达式和格式化读写...

作者:稀饭

本文约 2000字 ,建议阅读 16分钟

一、正则表达式

1、清洗手机号码

import re                     # 导入正则化模块
import numpy as np
import pandas as pd

# 清洗手机号码

s = ('13115021381','18277122391','17823912311','20218231923','138291229811') # 输出手机号码的数据,其中第4个数据不是手机号码(开头不是1)、第5个数据不是手机号码(有12位)
pattern = r'[1][35789]\d{9}$' # 设置正则化匹配的模式,手机号码是11位,第1位是1,第2
位是35789中的一个,然后剩下9位数,用\d{9}来完成,最后用$表示结尾(即只匹配11个数)
a = [] # 设置空列表
for data in s: # 对列表中的元素进行遍历
if re.findall(pattern,data) != []: # 设定匹配的结果,不要空list
a.append(data) # 当不是空list的时候,向数组中添加元素
a # 查看清洗得到的结果,可以看到'20218231923'和'138291229811'这两个假手机号码被清洗掉了
512265ce2d0c5659077f6ba9da605db3.png

2、清洗座机号码

s= ['010-28172132','0231-3817212','031-42312772','023-498281211','0131-39897123','0102321231']    # 输出座机号码,其中第4、6个数据不是座机号码
pattern = r'\d{2,3}-\d{7,8}$' # 座机号码的格式3或4数字-7或8数字
a = []
for data in s:
if re.findall(pattern,data) != []:
a.append(data)
a # 查看清洗得到的结果,可以看到最后第4个和第6个假座机号码已经被清洗掉了
7ff82b0177d75e5105f4fe161ef82c39.png

3、提取数据中出现“h”和“好”的数据,不区分大小写

s = ['Hi','好','human','真好吃']     # 设置模拟的数据
pattern_1 = r'h' # 设置匹配h的pattern
pattern_2 = r'好' # 设置匹配好的pattern,注意这里前缀必须加上r
a1 = []
a2 = [] # 设置两个空列表用来存数据
for data in s: # 使用循环来完成数据清洗
if re.findall(pattern_1,data,re.I) != []:
a1.append(data)
for data in s: # 使用循环来完成数据清洗
if re.findall(pattern_2,data,re.I) != []:
a2.append(data)
a1,a2 # 查看数据清洗的结果
49b9d968c37ef780d56df31201f6d866.png

4、提取数据集中包含“H2O”的数据

s = ['H2O','水H2O','过氧化氢H2O2','氢气H2']     # 设置模拟的数据
pattern = r'\w*H2O\w*' # 设置pattern的格式,在H2O的前后添加\w,然后使用*来表示查找任意数量的数据
a = []
for data in s: # 使用循环来完成数据清洗
if re.findall(pattern,data) != []:
a.append(data)
a # 查看最终的清洗结果
e1d743eb1576787d7a6310fbdbb87bd8.png

5、提取QQ邮箱

s = ['182872@qq.com','1232@qq.com','12342@qq.com.cn','sAnBe2am@qq.com','sWM@qq.com']    # 设置模拟的数据,其中第2个、第3个和第5个数据都不是需要提取的数据
pattern = r'[a-zA-Z0-9]{5,}@qq.com$' # 设置提取的规则,设定是5个字符及以上@qq.com,其他都不是正确的QQ邮箱,其中[a-zA-Z0-9]表示既可以是大小写字母,也可以是数字
a = [] # 设置一个空列表
for data in s: # 使用循环来完成数据清洗
if re.findall(pattern,data) != []:
a.append(data)
a # 输出最后清洗得到的数据
38057b710aa9b95b643bfe0713da18e4.png

6、清洗身份证号码

s = ['362301199608151016','36239818201']       # 设置身份证的测试数据,其中第2个数据有误pattern = r'^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$'   # 设置18为身份证号的匹配规则,注意分前6位、年份、月份、天数、最后4位来分析a = []for data in s:                                 # 使用循环来完成数据清洗    if re.findall(pattern,data) != []:        a.append(data)a                                              # 查看最终的清洗结果

6ff28d3af1ad3736fa5e98b309fb246f.png

二、格式化读写

1、读取数据

f_path = 'C:/Users/Lenovo/Desktop/1.txt'       # 设定文件的路径
with open(f_path,'r') as f: # 使用with open的方式进行读,读的关键字为'r'
print(f.read()) # 查看数据的读取结果。另外注意使用with open语句的时候不需要close
8e840ee249790855c56620e50defe775.png

2、逐行读取数据并存入list列表中

f_path = 'C:/Users/Lenovo/Desktop/1.txt'       # 设定文件的路径
dt = [] # 设置一个空的list,用于存放读取得到的数据
with open(f_path,'r') as f: # 使用with open的方式进行读,读的关键字为'r'
for line in f: # 使用for循环逐行读取数据
dt.append(line.rstrip()) # rstrip用于去除换行符号
print(dt) # 查看数据的结果
399fd4a549a2d240bbd255f22ff6f3cc.png

3、将刚才得到的数据由字符串格式转为数值型格式,并去掉空格

dt2 = []                                             # 设置一个空列表,用于存储数据
print(dt) # 查看原始的数据情况
for data in dt:
dt2.append(list(map(float,data.split(' ')))) # 使用split函数按照空格进行字符串分割,再把结果传递给map函数用于数据类型转化,最后再list化
print(dt2) # 查看最后转化得到的数据情况
cdaddab5a096a723ffc369184058deb4.png

4、写入一行数据(注意应该是追加写入,而不是覆盖),并在写的过程中比较写之前的数据情况和写之后的数据情况

f_path = 'C:/Users/Lenovo/Desktop/1.txt'       # 设定文件的路径
with open(f_path,'a+') as f: # 使用with open的方式进行写,写的关键字为'w',但是这里要求不覆盖原始数据,所以要用'a+'来表示追加写
f.seek(0) # 将指针重置到开头位置(使用a+时,指针默认在尾部)
print(f.read()) # 查看写之前的数据情况
f.seek(2) # 将指针放回到尾部
f.write('\n4 3.2 2.8 1.9') # 写入数据,注意添加换行符
f.seek(0) # 将指针再次回到头部
print('\n') # 输出一个换行符,用于区分数据输出结果
print(f.read()) # 查看数据写入后的情况
a793d040b32a5c3fa9939ea0c3924ab0.png

45df9ac297d6660b0c5708ab9a02605e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值