本文介紹了三個正則表達式和函數(shù)的使用的實例,,有興趣的朋友們可以仔細看看,! 第一題 用你學(xué)號的3位尾數(shù)作為訪問http:// 125.220. 66. 143/學(xué)號三位. html例如你是10000031,, 則訪問http://125. 220. 66. 143/31. html 0被 動略過.你會發(fā)現(xiàn)一個數(shù)字,和一個鏈接,。點擊這個鏈接,,又會發(fā)現(xiàn)一個鏈接。如此這樣n次后,,你會發(fā)現(xiàn)一個網(wǎng)頁沒有鏈接,,并且出現(xiàn)Thus_ is the end的字樣。求這些不同頁面出現(xiàn)數(shù)的和 注意:本題采用本地打開html文件的方式 from bs4 import BeautifulSoup import re with open('E:/findsum/142.html', 'r')as wb_data: #用jupytor Notebook打開本地網(wǎng)頁文件 Soup = BeautifulSoup(wb_data, 'html') #解析為網(wǎng)頁格式 t=Soup.decode('GBK') #解析對應(yīng)的字符 #print(t) pat='d+' number=re.findall(pat,t)[0] #讀取下一個地址的網(wǎng)頁數(shù)字 s=0 while 1: #循環(huán)直到不存在跳轉(zhuǎn)頁面為止 s+=eval(number) #(正則表達式找到的都是字符串,,所以要強制轉(zhuǎn)化為數(shù)字) str1='E:/findsum/'+number+'.html' #重新定義頁面,,循環(huán)操作 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頁面表示結(jié)束,結(jié)束后跳出,防止報錯 break print('求和的結(jié)果為') print(s) 第二題 從文件讀取數(shù)據(jù),,文件內(nèi)容為38, 399, 229,2, 23, 22, 3434, 344,,可以自己設(shè)計這個文件,用逗號為分隔符,。 編寫個函數(shù),,返回值為一個元組,包括了文件中所有數(shù)據(jù)和所有數(shù)據(jù)的積,,所有數(shù)據(jù)的平均值和方差這四個數(shù)據(jù) #定義一個函數(shù)求所有元素之積 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('所有數(shù)據(jù)和為',np.sum(list2)) print('所有數(shù)據(jù)的積為',fun(list2)) print('所有數(shù)據(jù)的平均值為',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))#最后轉(zhuǎn)換元組 第三題 統(tǒng)計有多少個不同的座機電話號碼多少不同的手機號碼,, 多少個不同的電子郵件?然后寫入一個文件數(shù)字為座機號碼數(shù)里 手機號碼數(shù)里電子郵件數(shù)量+學(xué)號的立方做為結(jié)果 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}' #十一位數(shù)的字符串 {}內(nèi)表示符號的個數(shù) y=set(re.findall(pat2,s)) #set去重 pat3='w+@+w+.+w' #w表示數(shù)字、字母,、下劃線等常規(guī)字符 #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('座機電話號碼數(shù)目為',a) print('手機號數(shù)目為',b) print('郵箱數(shù)目為',c) print('結(jié)果為',d) 著作權(quán)歸作者所有
|
|