目錄
1.讀寫文件
2.時(shí)間設(shè)置
3.正則表達(dá)式
4.計(jì)算機(jī)通信
5.爬蟲
1.讀寫文件
python可以把數(shù)據(jù)儲(chǔ)存在文件中,通過(guò)f = open(文件名, 方式)來(lái)打開文件對(duì)象讀取數(shù)據(jù)。打開文件的常用方式有“r”:讀取已存在的文件,“w”:新建文件并寫入,“a”:如果文件存在,那么寫入到文件的結(jié)尾。如果文件不存在,則新建文件并寫入。打開文件后就可以通過(guò)函數(shù)讀取或者寫入文件了,有關(guān)函數(shù)如下

上下文管理器(context manager)用于規(guī)定某個(gè)對(duì)象的使用范圍。一旦進(jìn)入或者離開該使用范圍,則會(huì)有特殊操作被調(diào)用,如在不需要文件的時(shí)候自動(dòng)關(guān)閉文件。

上面講到文本可以通過(guò)寫入到文件而保存到電腦磁盤中,python中的對(duì)象同樣可以這樣做,不過(guò)需要利用pickle包。通過(guò)pickle包儲(chǔ)存對(duì)象分兩步走,第一是序列化對(duì)象(dumps函數(shù)),即將對(duì)象在內(nèi)存中的數(shù)據(jù)抓取出來(lái)轉(zhuǎn)換成一個(gè)有序文本,第二是將文本寫入文件儲(chǔ)存,代碼如下

對(duì)象保存在文件中后,當(dāng)需要用到它時(shí)就可以通過(guò)pickle包的load()函數(shù)來(lái)將文本轉(zhuǎn)換成對(duì)象了。
2.時(shí)間設(shè)置
python的time包可以幫助我們進(jìn)行各種時(shí)間的管理,如

time包還定義了struct_time對(duì)象。該對(duì)象將掛鐘時(shí)間轉(zhuǎn)換為年、月、日、時(shí)、分、秒等,存儲(chǔ)在該對(duì)象的各個(gè)屬性中,比如tm_year、tm_mon、tm_mday……下面幾種方法可以將掛鐘時(shí)間轉(zhuǎn)換為struct_time對(duì)象:

python的datetime包是基于time包的一個(gè)高級(jí)包,datetime模塊下有兩個(gè)類:datetime.date類和datetime.time類,可以分別管理日期和時(shí)間。也可以直接用datetime.datetime類同時(shí)管理日期和時(shí)間。方法如下

利用datetime包的timedelta函數(shù)還可以進(jìn)行時(shí)間間隔的運(yùn)算

datatime包中的strptime函數(shù)可以將字符串中的時(shí)間信息轉(zhuǎn)換成datetime類的對(duì)象,比如

相反,可以同strftime函數(shù)將datetime對(duì)象轉(zhuǎn)換為特定格式的字符串,

可以看到,使得轉(zhuǎn)換一一對(duì)應(yīng)的關(guān)鍵就是%引領(lǐng)的符號(hào),除了上面的符號(hào)外還有

3.正則表達(dá)式
正則表達(dá)式(Regular Expression)的主要功能是從字符串(string)中通過(guò)特定的模式,搜索希望找到的內(nèi)容,需要通過(guò)re包來(lái)實(shí)現(xiàn),先看一段代碼

re.search()有兩個(gè)參數(shù),第一個(gè)參數(shù)是給出了搜索范圍0-9,第二個(gè)參數(shù)是表示給出的字符串中有哪些字符串在搜索范圍內(nèi)出現(xiàn)的,如果有就賦值給m。m.group()表示查看搜索到的結(jié)果,沒(méi)有結(jié)果會(huì)返回None。
除了re.search()外,re.match()也可以進(jìn)行搜索,不同的是后者必須是字符串的第一個(gè)字符開始就相符才能正常進(jìn)行,否則返回None。
搜素到的字符串可以用sub()函數(shù)進(jìn)行替換,形如str = re.sub(pattern, replacement, string),replacement就是替換用的的字符串。常用的方法還有

關(guān)于正則表達(dá)式,常用的語(yǔ)法有下面這些


舉個(gè)例子,第一個(gè),[0-9]{3,5}表示出現(xiàn)在[0-9]內(nèi)的字符重復(fù)(連續(xù))出現(xiàn)了3-5次,正例“9678”(4次),反例“12”(2次)、“1234567”(7次)。第二個(gè),a?b表示ab中的a可以出現(xiàn)可以不出現(xiàn),正例“b”(不出現(xiàn))、“ab”(出現(xiàn)),反例“cb”(并不是ab形式)。第三個(gè),a+b表示a可以重復(fù)1次或以上,正例“aaaaab”(a重復(fù)了5次再跟b),反例“b”(不是ab形式,沒(méi)有a了)。
還有一些與位置相關(guān)的符號(hào)

正則表達(dá)式的群,上面已經(jīng)提到過(guò)可以用group(0)來(lái)查看提取的字符串,其實(shí)這就表示查看所有的提取結(jié)果。如果我們把提取到的結(jié)果分成幾個(gè)部分,就成了幾個(gè)群,以用于進(jìn)一步提取字符串,如

群還可以被命名

4.計(jì)算機(jī)通信
計(jì)算機(jī)之間的通信有一套多層次的協(xié)議體系,HTTP(the Hypertext Transfer Protocol)就是最常見的一種,即超文本傳輸協(xié)議。HTTP協(xié)議能實(shí)現(xiàn)文件,特別是超文本文件的傳輸。HTTP的工作步驟分為兩步:請(qǐng)求(request)、回復(fù)(response)。計(jì)算機(jī)發(fā)出請(qǐng)求時(shí)會(huì)遵照下面格式

·GET:用于說(shuō)明想要服務(wù)器執(zhí)行的操作。
·/index.html: 資源的路徑,這里指向服務(wù)器上的index.html文件。
·HTTP/1.1協(xié)議的版本,HTTP第一個(gè)廣泛使用的版本是1.0,當(dāng)前版本為1.1。
·Host: www.example.com:Host后面是要訪問(wèn)的服務(wù)器地址。
服務(wù)器在接收到請(qǐng)求之后,會(huì)根據(jù)程序,生成對(duì)應(yīng)于該請(qǐng)求的回復(fù),比如:

·HTTP/1.1:協(xié)議版本
·200:狀態(tài)碼(status code)
·OK:狀態(tài)描述(其它描述有302:重新定向。404:無(wú)法找到)
·Content-type: text/plain:主體所包含的資源類型為普通文本(其它類型有text/html:HTML文? ? 本、image/jpeg:jpeg圖片、image/gif:gif圖片
·Content-length:12:主體本分的長(zhǎng)度為12字節(jié)
·Hello World!:回復(fù)的主體部分
Python標(biāo)準(zhǔn)庫(kù)中的http.client包可用于發(fā)出HTTP請(qǐng)求,

5.爬蟲
網(wǎng)絡(luò)爬蟲應(yīng)用很廣,它可以自動(dòng)瀏覽網(wǎng)頁(yè),從網(wǎng)頁(yè)上抓取我們想要的信息。許多研究互聯(lián)網(wǎng)行為的學(xué)者也會(huì)用爬蟲抓取網(wǎng)絡(luò)信息,用來(lái)進(jìn)一步分析人們使用互聯(lián)網(wǎng)的行為。我們現(xiàn)在可以利用前面所學(xué)的知識(shí)做一個(gè)簡(jiǎn)單的程序,實(shí)現(xiàn)提取博客最近文章的發(fā)表日期和閱讀量。
第一步:訪問(wèn)博客首頁(yè),作者的博客地址是www.cnblogs.com/vamei,主機(jī)是www.cnblogs.com,資源位置是/vamei。這個(gè)頁(yè)面是一個(gè)超文本文件,所以我們用 HTTPS協(xié)議訪問(wèn):

第二步:通過(guò)正則表達(dá)式提取有用信息(日期、時(shí)間和閱讀量):

結(jié)果為:
