內置模塊與第三方庫的使用

寫在最前:

Python的厲害之處就不多說了,在機器學習的技能圖譜中,Python屬於地基層面。為此,多花些時間,把Python基礎打牢固,是為將來的職業路徑中走得更遠更穩。

該Python基礎筆記是七月學員clownfish對機器學習集訓營一期中Python部分的整理,共分為四篇,1. Python環境配置及基礎數據類型,2. 控制循環,與函數,3.面向對象,4.內置模塊(os,文件,正則等)與第三方庫(requests等)的應用

Built-in Function內置函數(bif)

IO相關操作

一、 open函數

(一) 讀文件

打開文件的模式:

r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。

w打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。

wb以二進位格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。

讀取文件的屬性

print "", fo.name#文件名:

print " : ", fo.closed#是否已關閉

print " : ", fo.mode#訪問模式

read()與readline(),readlines()方法

read()方法從一個打開的文件中讀取一個字元

readline()讀取一行

readlines()讀取所有行

(二) 寫文件

write()方法

write()方法可將任何字元串寫入一個打開的文件。需要重點注意的是,Python字元串可以是二進位數據,而不是僅僅是文字。像圖片也可以進行保存。

(三) 關閉

file 對象的 close()方法刷新緩衝區里任何還沒寫入的信息,並關閉該文件,這之後便不能再進行寫入

二、csv模塊

三、json模塊

Json是種數據格式,具體內容大家自己百度下,它其實可以看成是和python中的字典模式很接近的。

os模塊

使用python,不僅會對文件內容進行各類操作,也會經常跟文件名,路徑,目錄打交道,因此python提供了內置的os模塊(操作系統模塊)來幫助我們完成這些操作。

os模塊包含普遍的操作系統功能,與具體的平台無關。

import os

以下列舉出個別常用的命令,更多命令大家自己可以使用dir或help來查看

返回當前當前Python運行路徑:os.getcwd() 返回指定目錄下的所有文件和目錄名:os.listdir()

刪除一個文件:os.remove() 檢驗給出的路徑是否是一個文件:os.path.isfile() 檢驗給出的路徑是否是一個目錄:os.path.isdir() 判斷是否是絕對路徑:os.path.isabs()

時間日期模塊

Python也內置提供了有關日期與時間的函數,封裝在了time模塊中供使用。

import time; # 引入time模塊

ticks = time.time()

print ("當前時間戳為:", ticks)

time.localtime(time.time())#返回一個當前本地時間的元組

time.asctime()

time.ctime()

print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) #格式化輸出

import calendar#日曆模塊

cal = calendar.month(2018, 1)

print ("以下輸出2018年1月份的日曆:")

print (cal)

正則模塊

正則的功用及其強大,大家自行百度下。這裡只簡單介紹下三種搜索方式,其中最常用的是findall。

使用前要先導入:

import re

正則匹配的語法及參數說明

正則匹配的語法:

re.command(pattern, string, flags=0)

說明:

pattern匹配的正則表達式

string要匹配的字元串。

flags 標誌位用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

compile

compile 函數根據一個模式字元串和可選的標誌參數生成一個正則表達式對象。該對象擁有一系列方法用於正則表達式匹配和替換。

re.match

re.match 嘗試從字元串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。

例子:

import re

print(re.match(www, www.163.com).span()) # 在起始位置匹配

print(re.match(com, www. 163.com)) #在起始位置匹配不到符合pattern的字元,返回None

#span() 返回一個tuple表示(m.start(), m.end())

#start() 返回起始位置,m.end()返回結束位置(不包含該位置的字元).

re.search

re.match只匹配字元串的開始,如果字元串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字元串,直到找到一個匹配。

注意:如果string中存在多個符合pattern子串,只返回第一個。

例子:

import re

url=baidu.com/logo.jpg#

re.search(www,url,re.S)[0]

re.findall

返回string中所有與pattern相匹配的全部字串,返回形式為數組。此方法最為常用,大家多多例子掌握。

例子:

info = <a href="baidu.com">baidu</a>
<a href="163.com">163</a>

re.findall(<a,info) #找出所有的<a標籤

re.findall(rw{3},Cat is smart than Dog,re.I)

re.findall(rd{2,4},543abc 543 defg54321)#找出左右為空格,長度在2或4的數字

使用compile對象

p = re.compile(rd+)

p.findall(one1two2three3four4)

[1, 2, 3, 4]

p = re.compile(r[a-z]+)

p.findall(one1two2three3four4)

[one, two, three, four]

p = re.compile(r[^one])

p.findall(one1two2three3four4)

[1, t, w, 2, t, h, r, 3, f, u, r, 4]

p = re.compile(r[^one]+)

p.findall(one1two2three3four4)

[1tw, 2thr, 3f, ur4]

import re p = re.compile(rd+) print (p.findall(one1two2three3four4))

[1, 2, 3, 4]

Request模塊

不多介紹了,這是一個第三方庫,在寫抓蟲時非常好用,使用前記得要先安裝

pip install requests

然後正常導入即可:

import requests

get方式獲取網頁

get(params)與r.url

get_data = {name: mogan, country_code: CN}

r = requests.get("163.com", params= get_data)

r.url#實際get請求的URL

r.text#請求網頁得到的文本

text與content

r.text返回的是Unicode型的數據。

使用r.content返回的是bytes型的數據。

也就是說,如果你想取文本,可以通過r.text。如果想取圖片,文件,則可以通過r.content

decode與encode

decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode(gb2312),表示將gb2312編碼的字元串轉換成unicode編碼。

encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode(gb2312),表示將unicode編碼的字元串轉換成gb2312編碼。

cookies

如果一個響應中包含了cookie,那麼我們可以利用 cookies 變數來拿到

import requests

url = http://example.com

r = requests.get(url)

print r.cookies

print r.cookies[example_cookie_name]

import requests

url = http://example.com

r = requests.get(url)

print r.cookies

print r.cookies[example_cookie_name]

以上程序僅是樣例,可以用 cookies 變數來得到站點的 cookies

另外可以利用 cookies 變數來向伺服器發送 cookies 信息

import requests

url = httpbin.org/cookies

cookies = dict(cookies_are=working)

r = requests.get(url, cookies=cookies)

print r.text

import requests

url = httpbin.org/cookies

cookies = dict(cookies_are=working)

r = requests.get(url, cookies=cookies)

print r.text

運行結果

{"cookies": {"cookies_are": "working"}}

1

{"cookies": {"cookies_are": "working"}}

可以已經成功向伺服器發送了 cookies

會話對象session

在以上樣例中,對網址每次請求都相當於發起了一個新的請求。也就是相當於我們每次請求之間沒有關係,它並不是在一個會話中完成,即使請求的是同一個網址。

那當我們需要保持一個持久的會話時,該那麼如何保持呢?就像用一個瀏覽器瀏覽電子郵件時,即使是在不同郵件之間跳轉,也使用是處於登陸後的狀態中。

import requests

s = requests.Session()#創建會話對象

s.get(httpbin.org/cookies/set)

r = s.get("httpbin.org/cookies")

print(r.text)

# {"cookies": {"sessioncookie": "123456789"}}

寫在最後:

機器學習之Python基礎筆記的最後一篇完成了。這四篇筆記都比較精簡,屬於對老師講授內容的總結性筆記,對於零起步學習AI的同學來說,還需要再多要跟著老師的在線課程進行複習,練習以鞏固Python基礎的部分。

多練習,多動手是學好Python,以及後面課程的不二法門,希望同學們都能打好編程的基礎。


推薦閱讀:

Python愛好者必看11個常用站點
0xA:Python版的Metasploit
看我如何進行Python對象注入利用
Python入門 類class提高篇

TAG:Python教程 | corerequest参数 | 机器学习 |