分享

python入门实例——正则表达式和函数的使用

 xiaoyimin 2019-10-17

本文介绍了三个正则表达式和函数的使用的实例,有兴趣的朋友们可以仔细看看!

第一题

用你学号的3位尾数作为访问http:// 125.220. 66. 143/学号三位. html例如你是10000031, 则访问http://125. 220. 66. 143/31. html 0被 动略过.你会发现一个数字,和一个链接。点击这个链接,又会发现一个链接。如此这样n次后,你会发现一个网页没有链接,并且出现Thus_ is the end的字样。求这些不同页面出现数的和

注意:本题采用本地打开html文件的方式

from bs4 import BeautifulSoup

import re

with open('E:/findsum/142.html', 'r')as wb_data: #用jupytor Notebook打开本地网页文件

Soup = BeautifulSoup(wb_data, 'html') #解析为网页格式

t=Soup.decode('GBK') #解析对应的字符

#print(t)

pat='d+'

number=re.findall(pat,t)[0] #读取下一个地址的网页数字

s=0

while 1: #循环直到不存在跳转页面为止

s+=eval(number) #(正则表达式找到的都是字符串,所以要强制转化为数字)

str1='E:/findsum/'+number+'.html' #重新定义页面,循环操作

with open(str1, 'r')as wb_data:

Soup = BeautifulSoup(wb_data, 'html')

t=Soup.decode('GBK')

pat='d+'

number=re.findall(pat,t)[0]

if number=='0000': #最后0000页面表示结束,结束后跳出,防止报错

break

print('求和的结果为')

print(s)

第二题

从文件读取数据,文件内容为38, 399, 229,2, 23, 22, 3434, 344,可以自己设计这个文件,用逗号为分隔符。

编写个函数,返回值为一个元组,包括了文件中所有数据和所有数据的积,所有数据的平均值和方差这四个数据

#定义一个函数求所有元素之积

def fun(list2):

s=1

for i in list2:

s*=i

return s

x=open('G:/临时文件/text1.txt','r').read()#读取文件

list0=[]

list1=x.split(',') #去除逗号

list2=list(map(int,list1)) #解包列表(将列表中的字符串元素全部变成int型元素)

print('列表为:',list2)

import numpy as np

print('所有数据和为',np.sum(list2))

print('所有数据的积为',fun(list2))

print('所有数据的平均值为',np.mean(list2))

print('方差为',np.var(list2))

list0.append(np.sum(list2))

list0.append(fun(list2))

list0.append(np.mean(list2))

list0.append(np.var(list2))

print('所求的元组为',tuple(list0))#最后转换元组

第三题

统计有多少个不同的座机电话号码多少不同的手机号码, 多少个不同的电子邮件?然后写入一个文件数字为座机号码数里 手机号码数里电子邮件数量+学号的立方做为结果

import numpy as np

import re

s=open('G:/临时文件/complex.txt','r').read() #读文件:open('路径','r').read() #写文件:open('路径','w').write()

pat='d{4}-d{7}'

pat1='d{3}-d{8}'

x=set(re.findall(pat,s)).union(set(re.findall(pat1,s))) #union集合合并

pat2='d{11}' #十一位数的字符串 {}内表示符号的个数

y=set(re.findall(pat2,s)) #set去重

pat3='w+@+w+.+w' #w表示数字、字母、下划线等常规字符

#pat4='[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+'

z=set(re.findall(pat3,s))

a=len(x)

b=len(y)

c=len(z)

p=1750300142

d=a*b*c+p**3

print('座机电话号码数目为',a)

print('手机号数目为',b)

print('邮箱数目为',c)

print('结果为',d)

著作权归作者所有

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多