推薦序
你會不會像我一樣喜歡這本書?
●Python, 我對它好奇已很久
伴隨著爬蟲、云計(jì)算、大數(shù)據(jù)、人工智能等一波波狂歡風(fēng)口,其中有一個(gè)讓任何碼界新老民工都無法忽視的存在,那就是Python。不就是一種開發(fā)語言嗎?但是:
爬蟲,為什么是Python,而不是C、Java……?
云計(jì)算,為什么是Python,而不是C、Java……?
大數(shù)據(jù),為什么是Python,而不是C、Java……?
人工智能,為什么是Python,而不是C、Java……?
更讓人詫異的是,不久前我與著名嵌入式開發(fā)專家楊國華教授一起討論工作時(shí)了解到,Python在嵌入式開發(fā)領(lǐng)域也正在攻城略地,大有燎原之勢。嵌入式開發(fā)領(lǐng)域不是C家的后院么?
作為一名專職的計(jì)算機(jī)圖書編輯,于公于私,我覺得是時(shí)候要深入了解一下Python了。當(dāng)然,基于我對自己深刻了解(缺腦),我采用了最笨但也最適合我的方法去了解Python,那就是親自去學(xué)一學(xué)、用一用。所以,依照網(wǎng)上書店的銷售排行買了我的第一本英文翻譯版的Python書,結(jié)果枯澀且錯(cuò)誤百出的翻譯耗掉了我為數(shù)不多的耐心。我又選了些國產(chǎn)的Python書,或枯燥或無用或超出了我的理解能力……我的要求不高,你只要能讓我順順利利地比照書上內(nèi)容做出點(diǎn)東西來就行,如爬蟲、抓個(gè)網(wǎng)頁或者做個(gè)人臉識別什么的……
但作為編輯,而且是專業(yè)的計(jì)算機(jī)圖書編輯,我對圖書的這種狀況雖然不滿但還是能理解。我知道,想出版一本能讓沒有編程經(jīng)驗(yàn)的人好學(xué)好懂又有趣的Python書,肯定是不容易的。
●我很喜歡這個(gè)簡單
由于工作關(guān)系,臺灣的著名計(jì)算機(jī)出版公司碁峰公司經(jīng)常會給我發(fā)一些他們最新的圖書出版信息,其中我發(fā)現(xiàn)了一本講解Python的書。我大概看了一下簡介,發(fā)現(xiàn)這本書帶有視頻講解,另外從目錄中我還發(fā)現(xiàn)里面包含了很多我非常感興趣的內(nèi)容,如爬蟲、網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)抓取、數(shù)據(jù)分析與展示、人臉識別、驗(yàn)證碼破解、Word文件操作、繪圖、游戲開發(fā)等。
內(nèi)容看起來很不錯(cuò),所以利用工作之便,讓對方給我寄了一本樣書,當(dāng)然是免費(fèi)的。我并沒有信心以我的基礎(chǔ)能讀懂這樣一本書,也做好了該書只是用花哨的主題來嘩眾取寵的思想準(zhǔn)備。
習(xí)慣性地,我先打開隨書光盤的第一段視頻,這段視頻講的是集成開發(fā)環(huán)境的安裝。根據(jù)我的經(jīng)驗(yàn),如果只講安裝而不講配置,可能就說明作者并無太多實(shí)戰(zhàn)經(jīng)驗(yàn)。但看完以后,我發(fā)現(xiàn)整個(gè)Python開發(fā)環(huán)境的安裝的確是根本不需要進(jìn)行任何配置操作的,如系統(tǒng)路徑等。按照書上講的安裝過程,不會出現(xiàn)一點(diǎn)意外。我印象中之前幾次嘗試學(xué)習(xí)Java和.Net時(shí),都是在開發(fā)環(huán)境的安裝這一步直接栽了安裝開發(fā)環(huán)境的過程中不是缺這個(gè)就是少那個(gè)……
我很懷疑,這么簡單的安裝操作后我是否真的就可以編寫Python程序了。按照書中的操作步驟,我開始把本書第一個(gè)簡單得不能再簡單的小程序代碼敲了進(jìn)去:
a=1
b=2
sum=a b
print("總和"= str(sum))
它是那么簡單!沒看到期待中的變量、語法、程序結(jié)構(gòu)的講解。
它是那么簡單!沒有印象中的導(dǎo)入包、頭文件,甚至沒有變量聲明,沒有印象中的編譯、連接。
它是那么簡單!從敲代碼到理解代碼到運(yùn)行出結(jié)果,前后不到1分鐘時(shí)間。
更加令我懷疑人生的是,我僅以若干年前在大學(xué)里學(xué)習(xí)C語言時(shí)遺留的一些模糊知識,竟然對幾行代碼完全不感覺困惑……
簡單,正是我喜歡的風(fēng)格。感覺我好像可以跟隨這本書走得遠(yuǎn)一點(diǎn)。
●懷疑地走到最后
一步一步,終于到了我最激動的爬蟲制作,此時(shí)依然擔(dān)心我是否真的能按書上所講親手爬下一個(gè)網(wǎng)頁數(shù)據(jù),哪怕是一整個(gè)網(wǎng)頁。事實(shí)上,這個(gè)過程中也確實(shí)遇到了問題,案例中所講的網(wǎng)站地址是臺灣地址,在大陸無法直接訪問。百度了半天,解決的辦法其實(shí)超級簡單,把代碼中的網(wǎng)址隨便換成一個(gè)大陸可以訪問的網(wǎng)址就可以了……
我竟然做了一個(gè)爬蟲出來!
又經(jīng)過后面幾個(gè)案例,我逐漸意識到本書精妙所在。這的確不是一本嘩眾取寵、為追求市場熱點(diǎn)而編寫的書:每個(gè)知識點(diǎn)都配有一個(gè)小得不能再小但可以獨(dú)立運(yùn)行的案例;知識點(diǎn)和案例的先后順序經(jīng)過了嚴(yán)格設(shè)計(jì),形成了完美的由淺入深但絕不越界的內(nèi)容結(jié)構(gòu);每章的綜合案例尤其值得稱贊,綜合案例雖然長一點(diǎn),卻是恰到好處地由前面講到基本點(diǎn)組成。當(dāng)然最重要的是,我的的確確親手將所有實(shí)驗(yàn)都做了出來,而且能夠完全理解。
難以想象,我跟隨全書竟然完成了爬蟲、網(wǎng)頁實(shí)時(shí)數(shù)據(jù)抓取、數(shù)據(jù)分析與圖表制作、文件解析及操作、人臉識別、驗(yàn)證碼識別、繪圖、游戲以及Python文件的打包等所有案例。
期間,我甚至沒有功夫去抱怨別扭的臺灣話。
●以權(quán)謀私
臺灣的碁峰公司免費(fèi)送我這本書的目的是讓我評估這本書是否可以在大陸出版,但我沉浸在學(xué)習(xí)與收獲的快感之中,以至于都忘了給對方回復(fù)一個(gè)郵件。直到后來碁峰公司再次來信小心翼翼地(我們是甲方)詢問此書是否可在大陸出版。
我是如此地喜歡這本書,沒有假惺惺地?cái)[一下譜就與對方簽訂了本書的出版合同。
接下來的工作更加忙碌,為了讓讀者早日能見到這本我最喜愛的Python書,我同步開始了本書出版準(zhǔn)備工作:把繁體版翻譯成簡體版;把整書的全部程序再運(yùn)行一遍,重抓實(shí)驗(yàn)圖片從而把圖片中的繁體字轉(zhuǎn)為簡體字;把光盤中所有代碼中的繁體字變成簡體字;把原書案例代碼中注釋不夠詳細(xì)的地方逐行加了注釋(我習(xí)慣于假設(shè)讀者都是我這種水平,注釋也許啰嗦,但萬一某個(gè)讀者真與我水平一樣甚至還沒有我水平高呢?);把一些大陸不能訪問的實(shí)驗(yàn)案例改為大家可以順利進(jìn)行實(shí)驗(yàn)的案例……唯一抱歉的是,光盤中的視頻我沒法重錄,好在作者的普通話還可以。
所有這些工作,正常來說在出版社都有專門的人進(jìn)行處理。我以權(quán)謀私全部親手給包了。一是為了再次享受本書的精彩以對所學(xué)知識加以鞏固,二是想把我在學(xué)習(xí)過程中覺得不順暢的地方變得順暢。
由于本人水平畢竟有限,錯(cuò)誤之處請大家批評指正。書中遇到任何問題可加本人QQ(172559140)進(jìn)行討論。
●本書適合誰
本書特別適合于多次嘗試學(xué)習(xí)Python、多次購買Python圖書但都半途而廢的讀者。
本書特別適合于想學(xué)Python但卻擔(dān)心自己基礎(chǔ)太差而學(xué)不會的讀者。
本書特別適合于想用Python 做點(diǎn)真玩意出來的讀者。
但本書不適合于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 在命令窗口運(yùn)行一個(gè)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 運(yùn)行程序 /21
1.4.4 在線運(yùn)行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 表達(dá)式 /30
2.2.1 input 命令 /30
2.2.2 算術(shù)運(yùn)算符 /31
2.2.3 關(guān)系運(yùn)算符 /31
2.2.4 邏輯運(yùn)算符 /32
2.2.5 復(fù)合賦值運(yùn)算符 /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進(jìn)行數(shù)據(jù)查詢 /97
4.3.5 SQLite數(shù)據(jù)庫實(shí)戰(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 用正則表達(dá)式抓取網(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 通過鼠標(biāo)右鍵查看網(wǎng)頁源代碼 /116
5.3.4 試用BeautifulSoup進(jìn)行網(wǎng)頁抓取與解析 /117
5.4 牛刀初試編寫你自己的網(wǎng)絡(luò)爬蟲 /121
5.4.1 抓取北京市PM2.5實(shí)時(shí)數(shù)據(jù) /121
5.4.2 爬取指定網(wǎng)站的圖片 /124
CH06 實(shí)現(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ù)計(jì)劃程序?qū)崿F(xiàn)自動下載 /133
6.3 用Selenium組件實(shí)現(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 實(shí)戰(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 散點(diǎn)圖 /161
7.2.4 實(shí)戰(zhàn):用Bokeh繪制我國GDP數(shù)據(jù)統(tǒng)計(jì)圖
/163
CH08 實(shí)戰(zhàn):Word文件操作
/167
8.1 用Win32com組件操作Word 文件
/168
8.1.1 實(shí)現(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 實(shí)戰(zhàn):菜單自動生成器及批處理替換文字 /179
8.2.1 實(shí)戰(zhàn)一:自動生成菜單Word文件 /179
8.2.2 實(shí)戰(zhàn)二:批量替換Word文件中的文字 /183
CH09 實(shí)戰(zhàn):PM2.5實(shí)時(shí)監(jiān)測顯示器
/185
9.1 Pandas:強(qiáng)大的數(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 實(shí)戰(zhàn):PM2.5 實(shí)時(shí)監(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 實(shí)戰(zhàn):人臉識別及驗(yà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進(jìn)行人臉識別 /212
10.1.5 抓取臉部圖形及保存 /215
10.1.6 抓取攝像頭視頻圖像 /217
10.1.7 實(shí)戰(zhàn):通過人臉識別進(jìn)行登錄 /219
10.2 用Tesseract識別驗(yàn)證碼 /223
10.2.1 簡單的OCR-Tesseract包 /223
10.2.2 驗(yàn)證碼識別的原理 /225
10.2.3 實(shí)戰(zhàn):驗(yàn)證碼破解 /227
CH11 實(shí)戰(zhàn):Firebase實(shí)時(shí)數(shù)據(jù)庫應(yīng)用 /231
11.1 Firebase實(shí)時(shí)數(shù)據(jù)庫 /232
11.1.1 Firebase
實(shí)時(shí)數(shù)據(jù)庫簡介 /232
11.1.2 創(chuàng)建Firebase實(shí)時(shí)數(shù)據(jù)庫 /232
11.1.3 新增Firebase實(shí)時(shí)數(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 實(shí)戰(zhàn):Firebase版電子詞典 /245
11.3.1 英漢詞典標(biāo)準(zhǔn)版 /246
11.3.2 英漢詞典進(jìn)階版 /253
CH12 實(shí)戰(zhàn):批量更改文件夾、文件名及文件查找 /259
12.1文件管理應(yīng)用 /260
12.1.1 實(shí)戰(zhàn):根據(jù)指定的編號保存文件 /260
12.1.2 實(shí)戰(zhàn):大批文件復(fù)制搬移及重新命名 /262
12.1.3 實(shí)戰(zhàn):找出重復(fù)的照片 /264
12.1.4 實(shí)戰(zhàn):把圖片文件改為相同大小 /266
12.2 在多個(gè)文件中查找指定的字符 /268
12.2.1 實(shí)戰(zhàn):在多個(gè)文本文件中查找 /268
12.2.2 實(shí)戰(zhàn):在Word文件中查找指定字符 /269
CH13 實(shí)戰(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 實(shí)戰(zhàn):制作一個(gè)音效播放器 /275
13.3 音樂播放 /278
13.3.1 music對象 /278
13.3.2 實(shí)戰(zhàn):制作MP3音樂播放器 /278
CH14 實(shí)戰(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 水平移動的藍(lán)色球體 /291
14.2.3 制作一個(gè)可自由移動的藍(lán)色球體 /293
14.2.4 角色類(Sprite) /294
14.2.5 碰撞偵測 /297
14.2.6 檢測鍵盤事件 /299
14.2.7 鼠標(biāo)事件 /301
14.3 實(shí)戰(zhàn):俄羅斯方塊游戲 /303
14.3.1 應(yīng)用程序總覽 /303
14.3.2 球體、方塊、滑板的角色類 /304
14.3.3 自定義方法及主程序 /307
CH15 把Python打包成可執(zhí)行文件 /311
15.1 打包前的準(zhǔn)備 /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 實(shí)際制作onefile式的.exe文件
/314
15.3 把項(xiàng)目打包為可執(zhí)行文件 /314