推薦序
你會不會像我一樣喜歡這本書?
●Python, 我對它好奇已很久
伴隨著爬蟲、云計算、大數(shù)據(jù)、人工智能等一波波狂歡風(fēng)口,其中有一個讓任何碼界新老民工都無法忽視的存在,那就是Python。不就是一種開發(fā)語言嗎?但是:
爬蟲,為什么是Python,而不是C、Java……?
云計算,為什么是Python,而不是C、Java……?
大數(shù)據(jù),為什么是Python,而不是C、Java……?
人工智能,為什么是Python,而不是C、Java……?
更讓人詫異的是,不久前我與著名嵌入式開發(fā)專家楊國華教授一起討論工作時了解到,Python在嵌入式開發(fā)領(lǐng)域也正在攻城略地,大有燎原之勢。嵌入式開發(fā)領(lǐng)域不是C家的后院么?
作為一名專職的計算機圖書編輯,于公于私,我覺得是時候要深入了解一下Python了。當(dāng)然,基于我對自己深刻了解(缺腦),我采用了最笨但也最適合我的方法去了解Python,那就是親自去學(xué)一學(xué)、用一用。所以,依照網(wǎng)上書店的銷售排行買了我的第一本英文翻譯版的Python書,結(jié)果枯澀且錯誤百出的翻譯耗掉了我為數(shù)不多的耐心。我又選了些國產(chǎn)的Python書,或枯燥或無用或超出了我的理解能力……我的要求不高,你只要能讓我順順利利地比照書上內(nèi)容做出點東西來就行,如爬蟲、抓個網(wǎng)頁或者做個人臉識別什么的……
但作為編輯,而且是專業(yè)的計算機圖書編輯,我對圖書的這種狀況雖然不滿但還是能理解。我知道,想出版一本能讓沒有編程經(jīng)驗的人好學(xué)好懂又有趣的Python書,肯定是不容易的。
●我很喜歡這個簡單
由于工作關(guān)系,臺灣的著名計算機出版公司碁峰公司經(jīng)常會給我發(fā)一些他們最新的圖書出版信息,其中我發(fā)現(xiàn)了一本講解Python的書。我大概看了一下簡介,發(fā)現(xiàn)這本書帶有視頻講解,另外從目錄中我還發(fā)現(xiàn)里面包含了很多我非常感興趣的內(nèi)容,如爬蟲、網(wǎng)絡(luò)實時數(shù)據(jù)抓取、數(shù)據(jù)分析與展示、人臉識別、驗證碼破解、Word文件操作、繪圖、游戲開發(fā)等。
內(nèi)容看起來很不錯,所以利用工作之便,讓對方給我寄了一本樣書,當(dāng)然是免費的。我并沒有信心以我的基礎(chǔ)能讀懂這樣一本書,也做好了該書只是用花哨的主題來嘩眾取寵的思想準備。
習(xí)慣性地,我先打開隨書光盤的第一段視頻,這段視頻講的是集成開發(fā)環(huán)境的安裝。根據(jù)我的經(jīng)驗,如果只講安裝而不講配置,可能就說明作者并無太多實戰(zhàn)經(jīng)驗。但看完以后,我發(fā)現(xiàn)整個Python開發(fā)環(huán)境的安裝的確是根本不需要進行任何配置操作的,如系統(tǒng)路徑等。按照書上講的安裝過程,不會出現(xiàn)一點意外。我印象中之前幾次嘗試學(xué)習(xí)Java和.Net時,都是在開發(fā)環(huán)境的安裝這一步直接栽了安裝開發(fā)環(huán)境的過程中不是缺這個就是少那個……
我很懷疑,這么簡單的安裝操作后我是否真的就可以編寫Python程序了。按照書中的操作步驟,我開始把本書第一個簡單得不能再簡單的小程序代碼敲了進去:
a=1
b=2
sum=a b
print("總和"= str(sum))
它是那么簡單!沒看到期待中的變量、語法、程序結(jié)構(gòu)的講解。
它是那么簡單!沒有印象中的導(dǎo)入包、頭文件,甚至沒有變量聲明,沒有印象中的編譯、連接。
它是那么簡單!從敲代碼到理解代碼到運行出結(jié)果,前后不到1分鐘時間。
更加令我懷疑人生的是,我僅以若干年前在大學(xué)里學(xué)習(xí)C語言時遺留的一些模糊知識,竟然對幾行代碼完全不感覺困惑……
簡單,正是我喜歡的風(fēng)格。感覺我好像可以跟隨這本書走得遠一點。
●懷疑地走到最后
一步一步,終于到了我最激動的爬蟲制作,此時依然擔(dān)心我是否真的能按書上所講親手爬下一個網(wǎng)頁數(shù)據(jù),哪怕是一整個網(wǎng)頁。事實上,這個過程中也確實遇到了問題,案例中所講的網(wǎng)站地址是臺灣地址,在大陸無法直接訪問。百度了半天,解決的辦法其實超級簡單,把代碼中的網(wǎng)址隨便換成一個大陸可以訪問的網(wǎng)址就可以了……
我竟然做了一個爬蟲出來!
又經(jīng)過后面幾個案例,我逐漸意識到本書精妙所在。這的確不是一本嘩眾取寵、為追求市場熱點而編寫的書:每個知識點都配有一個小得不能再小但可以獨立運行的案例;知識點和案例的先后順序經(jīng)過了嚴格設(shè)計,形成了完美的由淺入深但絕不越界的內(nèi)容結(jié)構(gòu);每章的綜合案例尤其值得稱贊,綜合案例雖然長一點,卻是恰到好處地由前面講到基本點組成。當(dāng)然最重要的是,我的的確確親手將所有實驗都做了出來,而且能夠完全理解。
難以想象,我跟隨全書竟然完成了爬蟲、網(wǎng)頁實時數(shù)據(jù)抓取、數(shù)據(jù)分析與圖表制作、文件解析及操作、人臉識別、驗證碼識別、繪圖、游戲以及Python文件的打包等所有案例。
期間,我甚至沒有功夫去抱怨別扭的臺灣話。
●以權(quán)謀私
臺灣的碁峰公司免費送我這本書的目的是讓我評估這本書是否可以在大陸出版,但我沉浸在學(xué)習(xí)與收獲的快感之中,以至于都忘了給對方回復(fù)一個郵件。直到后來碁峰公司再次來信小心翼翼地(我們是甲方)詢問此書是否可在大陸出版。
我是如此地喜歡這本書,沒有假惺惺地擺一下譜就與對方簽訂了本書的出版合同。
接下來的工作更加忙碌,為了讓讀者早日能見到這本我最喜愛的Python書,我同步開始了本書出版準備工作:把繁體版翻譯成簡體版;把整書的全部程序再運行一遍,重抓實驗圖片從而把圖片中的繁體字轉(zhuǎn)為簡體字;把光盤中所有代碼中的繁體字變成簡體字;把原書案例代碼中注釋不夠詳細的地方逐行加了注釋(我習(xí)慣于假設(shè)讀者都是我這種水平,注釋也許啰嗦,但萬一某個讀者真與我水平一樣甚至還沒有我水平高呢?);把一些大陸不能訪問的實驗案例改為大家可以順利進行實驗的案例……唯一抱歉的是,光盤中的視頻我沒法重錄,好在作者的普通話還可以。
所有這些工作,正常來說在出版社都有專門的人進行處理。我以權(quán)謀私全部親手給包了。一是為了再次享受本書的精彩以對所學(xué)知識加以鞏固,二是想把我在學(xué)習(xí)過程中覺得不順暢的地方變得順暢。
由于本人水平畢竟有限,錯誤之處請大家批評指正。書中遇到任何問題可加本人QQ(172559140)進行討論。
●本書適合誰
本書特別適合于多次嘗試學(xué)習(xí)Python、多次購買Python圖書但都半途而廢的讀者。
本書特別適合于想學(xué)Python但卻擔(dān)心自己基礎(chǔ)太差而學(xué)不會的讀者。
本書特別適合于想用Python 做點真玩意出來的讀者。
但本書不適合于Python資深碼農(nóng)。
希望本書能夠真正助您步入Python殿堂。
本書讀者、譯者、策劃編輯
周春元
推薦序
學(xué)習(xí)資源說明
CH01 輕松配置Python開發(fā)環(huán)境
/1
1.1 Python編程語言簡介 /2
1.1.1 Python發(fā)展史 /2
1.1.2 Python 特色 /3
1.2 內(nèi)置的Anaconda開發(fā)環(huán)境 /4
1.2.1 安裝Anaconda套件 /4
1.2.2 Anaconda
Prompt套件 /6
1.2.3 在命令窗口運行一個Python程序 /9
1.2.4 用Anaconda Prompt 建立虛擬環(huán)境 /9
1.2.5 IPython 交互式命令窗口 /12
1.3 Spyder編輯器 /14
1.3.1 啟動 Spyder 編輯器及文件管理 /15
1.3.2 Spyder 智能輸入 /17
1.3.3 程序調(diào)試 /17
1.4 Jupyter
Notebook 編輯器 /19
1.4.1 啟動 Jupyter Notebook 及建立文件 /19
1.4.2 Jupyter
Notebook智能輸入 /20
1.4.3 用Jupyter Notebook 運行程序 /21
1.4.4 在線運行Python /22
CH02 基本語法與結(jié)構(gòu)控制 /23
2.1 變量與數(shù)據(jù)類型 /24
2.1.1 變量 /24
2.1.2 變量命名規(guī)則 /25
2.1.3 數(shù)值、布爾與字符串?dāng)?shù)據(jù)類型 /26
2.1.4 print 及 type 命令 /27
2.1.5 數(shù)據(jù)類型的轉(zhuǎn)換 /29
2.2 表達式 /30
2.2.1 input 命令 /30
2.2.2 算術(shù)運算符 /31
2.2.3 關(guān)系運算符 /31
2.2.4 邏輯運算符 /32
2.2.5 復(fù)合賦值運算符 /33
2.3 條件語句 /35
2.3.1 程序流程控制 /35
2.3.2 單向條件(if...) /35
2.3.3 雙向條件語句(if...else) /37
2.3.4 多向條件語句(if...elif...else) /38
2.3.5 條件嵌套 /40
CH03 循環(huán)、數(shù)據(jù)結(jié)構(gòu)及函數(shù) /43
3.1 循環(huán) /44
3.1.1 列表(List)結(jié)構(gòu) /44
3.1.2 range 函數(shù) /45
3.1.3 for 循環(huán) /46
3.1.4 for循環(huán)嵌套 /48
3.1.5 break及continue命令 /49
3.1.6
for...if...else 循環(huán) /50
3.1.7 while循環(huán) /52
3.2 列表、元組結(jié)構(gòu)及字典結(jié)構(gòu) /53
3.2.1 高級列表操作 /54
3.2.2 元組(Tuple) /56
3.2.3 字典(Dict) /58
3.2.4 高級字典操作 /59
3.3 函數(shù) /62
3.3.1 自定義函數(shù) /62
3.3.2 不定參函數(shù) /64
3.3.3 變量有效范圍 /65
3.3.4 系統(tǒng)內(nèi)置函數(shù) /66
3.3.5 導(dǎo)入包 /69
CH04 文件處理及SQLite數(shù)據(jù)庫
/71
4.1 文件和目錄管理 /72
4.1.1 os /72
4.1.2
os.path /73
4.1.3
os.walk /75
4.1.4 shutil包 /76
4.1.5 glob包 /77
4.2 open()打開文件 /78
4.2.1 用open()函數(shù)打開文件 /78
4.2.2 文件操作 /81
4.2.3 文件操作的應(yīng)用 /85
4.3 SQLite 數(shù)據(jù)庫 /91
4.3.1 管理SQLite數(shù)據(jù)庫 /91
4.3.2 用SQLite Manager創(chuàng)建SQLite數(shù)據(jù)庫
/93
4.3.3 使用sqlite3包 /94
4.3.4 用cursor進行數(shù)據(jù)查詢 /97
4.3.5 SQLite數(shù)據(jù)庫實戰(zhàn) /98
CH05 Web數(shù)據(jù)抓取與分析 /105
5.1 網(wǎng)址解析 /106
5.2 網(wǎng)頁數(shù)據(jù)抓取 /107
5.2.1 用requests抓取網(wǎng)頁源代碼 /107
5.2.2 搜索指定字符串 /108
5.2.3 用正則表達式抓取網(wǎng)頁內(nèi)容 /109
5.3 小試網(wǎng)頁分析 /114
5.3.1 HTML網(wǎng)頁結(jié)構(gòu) /114
5.3.2 從網(wǎng)頁開發(fā)界面查看網(wǎng)頁源代碼 /115
5.3.3 通過鼠標右鍵查看網(wǎng)頁源代碼 /116
5.3.4 試用BeautifulSoup進行網(wǎng)頁抓取與解析 /117
5.4 牛刀初試編寫你自己的網(wǎng)絡(luò)爬蟲 /121
5.4.1 抓取北京市PM2.5實時數(shù)據(jù) /121
5.4.2 爬取指定網(wǎng)站的圖片 /124
CH06 實現(xiàn)自動網(wǎng)頁測試 /127
6.1 檢查網(wǎng)站數(shù)據(jù)是否更新 /128
6.1.1 用hashlib判別文件是否有過更新 /128
6.1.2 用md5檢查網(wǎng)站內(nèi)容是否更新 /128
6.1.3 再試牛刀:抓取網(wǎng)絡(luò)公開數(shù)據(jù) /129
6.2 通過任務(wù)計劃程序?qū)崿F(xiàn)自動下載 /133
6.3 用Selenium組件實現(xiàn)瀏覽器操作自動化 /137
6.3.1 Selenium組件 /138
6.3.2 查找網(wǎng)頁元素 /140
6.3.3 應(yīng)用:自動登錄網(wǎng)站 /142
CH07 繪制圖形 /145
7.1 Matplotlib 組件 /146
7.1.1
Matplotlib 基本繪圖 /146
7.1.2 plot 方法的參數(shù)及圖形設(shè)置 /147
7.1.3 在Matplotlib中顯示中文 /150
7.1.4 繪制柱狀圖及餅圖 /151
7.1.5 實戰(zhàn):爬取我國1990年到2016年GDP數(shù)據(jù)并繪圖顯示 /154
7.2 Bokeh組件 /156
7.2.1 Bokeh 基本繪圖 /156
7.2.2 line方法的參數(shù)及圖形屬性設(shè)置 /158
7.2.3 散點圖 /161
7.2.4 實戰(zhàn):用Bokeh繪制我國GDP數(shù)據(jù)統(tǒng)計圖
/163
CH08 實戰(zhàn):Word文件操作
/167
8.1 用Win32com組件操作Word 文件
/168
8.1.1 實現(xiàn)新建文件并保存 /168
8.1.2 打開文件并顯示文件內(nèi)容 /171
8.1.3 設(shè)置范圍的格式 /172
8.1.4 表格處理 /174
8.1.5 向Word文件中插入圖片 /176
8.1.6 自動查找替換Word文件中的指定文字 /177
8.2 實戰(zhàn):菜單自動生成器及批處理替換文字 /179
8.2.1 實戰(zhàn)一:自動生成菜單Word文件 /179
8.2.2 實戰(zhàn)二:批量替換Word文件中的文字 /183
CH09 實戰(zhàn):PM2.5實時監(jiān)測顯示器
/185
9.1 Pandas:強大的數(shù)據(jù)處理套件 /186
9.1.1 創(chuàng)建DataFrame 數(shù)據(jù) /186
9.1.2 讀取DataFrame數(shù)據(jù) /188
9.1.3 DataFrame數(shù)據(jù)的修改及排序 /192
9.1.4 刪除DataFrame數(shù)據(jù) /193
9.1.5 導(dǎo)入數(shù)據(jù) /194
9.1.6 繪制圖形 /197
9.2 實戰(zhàn):PM2.5 實時監(jiān)測顯示器 /198
9.2.1 應(yīng)用程序總覽 /198
9.2.2 PM2.5公開數(shù)據(jù) /199
9.2.3 用戶數(shù)據(jù)接口配置 /200
9.2.4 事件處理及函數(shù) /202
CH10 實戰(zhàn):人臉識別及驗證碼圖片破解 /205
10.1 OpenCV:人臉識別應(yīng)用 /206
10.1.1用OpenCV讀取和顯示圖形 /206
10.1.2 保存圖像文件 /209
10.1.3 OpenCV基本繪圖 /210
10.1.4 用OpenCV進行人臉識別 /212
10.1.5 抓取臉部圖形及保存 /215
10.1.6 抓取攝像頭視頻圖像 /217
10.1.7 實戰(zhàn):通過人臉識別進行登錄 /219
10.2 用Tesseract識別驗證碼 /223
10.2.1 簡單的OCR-Tesseract包 /223
10.2.2 驗證碼識別的原理 /225
10.2.3 實戰(zhàn):驗證碼破解 /227
CH11 實戰(zhàn):Firebase實時數(shù)據(jù)庫應(yīng)用 /231
11.1 Firebase實時數(shù)據(jù)庫 /232
11.1.1 Firebase
實時數(shù)據(jù)庫簡介 /232
11.1.2 創(chuàng)建Firebase實時數(shù)據(jù)庫 /232
11.1.3 新增Firebase實時數(shù)據(jù)庫資料 /234
11.1.4 設(shè)置數(shù)據(jù)庫權(quán)限 /235
11.2 建立Firebase數(shù)據(jù)庫連接 /236
11.2.1 使用python-firebase包 /236
11.2.2 firebase對象的方法 /236
11.3 實戰(zhàn):Firebase版電子詞典 /245
11.3.1 英漢詞典標準版 /246
11.3.2 英漢詞典進階版 /253
CH12 實戰(zhàn):批量更改文件夾、文件名及文件查找 /259
12.1文件管理應(yīng)用 /260
12.1.1 實戰(zhàn):根據(jù)指定的編號保存文件 /260
12.1.2 實戰(zhàn):大批文件復(fù)制搬移及重新命名 /262
12.1.3 實戰(zhàn):找出重復(fù)的照片 /264
12.1.4 實戰(zhàn):把圖片文件改為相同大小 /266
12.2 在多個文件中查找指定的字符 /268
12.2.1 實戰(zhàn):在多個文本文件中查找 /268
12.2.2 實戰(zhàn):在Word文件中查找指定字符 /269
CH13 實戰(zhàn):音樂播放器 /273
13.1 關(guān)于音樂與音樂的播放 /274
13.1.1 使用pygame包 /274
13.1.2 mixer對象 /274
13.2 音效播放 /274
13.2.1 Sound對象 /274
13.2.2 實戰(zhàn):制作一個音效播放器 /275
13.3 音樂播放 /278
13.3.1 music對象 /278
13.3.2 實戰(zhàn):制作MP3音樂播放器 /278
CH14 實戰(zhàn):Pygame游戲開發(fā)
/283
14.1 Pygame入門 /284
14.1.1 Pygame的基本架構(gòu) /284
14.1.2 基本繪圖 /286
14.1.3 加載圖片 /288
14.1.4 插入文本 /290
14.2 Pygame動畫讓圖片動起來 /290
14.2.1 動畫處理程序的基本架構(gòu) /291
14.2.2 水平移動的藍色球體 /291
14.2.3 制作一個可自由移動的藍色球體 /293
14.2.4 角色類(Sprite) /294
14.2.5 碰撞偵測 /297
14.2.6 檢測鍵盤事件 /299
14.2.7 鼠標事件 /301
14.3 實戰(zhàn):俄羅斯方塊游戲 /303
14.3.1 應(yīng)用程序總覽 /303
14.3.2 球體、方塊、滑板的角色類 /304
14.3.3 自定義方法及主程序 /307
CH15 把Python打包成可執(zhí)行文件 /311
15.1 打包前的準備 /312
15.1.1 安裝PyInstaller /312
15.1.2
PyInstaller 使用方法 /312
15.2 制作.exe可執(zhí)行文件 /313
15.2.1 以onedir方式制作.exe可執(zhí)行文件
/313
15.2.2 實際制作onefile式的.exe文件
/314
15.3 把項目打包為可執(zhí)行文件 /314