內容簡介
人們面臨的大多數任務都可以通過編寫計算機軟體來完成。Python是一種解釋型、面向對象、動態數據類型的高級程式設計語言。通過Python編程,我們能夠解決現實生活中的很多任務。
本書是一本面向實踐的Python編程實用指南。本書的目的,不僅是介紹Python語言的基礎知識,而且還通過項目實踐教會讀者如何套用這些知識和技能。本書的首部分介紹了基本Python編程概念,第二部分介紹了一些不同的任務,通過編寫Python程式,可以讓計算機自動完成它們。第二部分的每一章都有一些項目程式,供讀者學習。每章的末尾還提供了一些習題和深入的實踐項目,幫助讀者鞏固所學的知識。附錄部分提供了所有習題的解答。
本書適合任何想要通過Python學習編程的讀者,尤其適合缺乏編程基礎的初學者。通過閱讀本書,讀者將能利用強大的程式語言和工具,並且會體會到Python編程的快樂。
目錄
第一部分Python編程基礎
第1章 Python基礎 3
1.1 在互動式環境中輸入表達式 3
1.2 整型、浮點型和字元串數據類型 6
1.3 字元串連線和複製 6
1.4 在變數中保存值 7
1.4.1 賦值語句 7
1.4.2 變數名 9
1.5 第一個程式 9
1.6 程式剖析 11
1.6.1 注釋 11
1.6.2 print()函式 11
1.6.3 input()函式 11
1.6.4 列印用戶的名字 12
1.6.5 len()函式 12
1.6.6 str()、int()和float()函式 13
1.7 小結 15
1.8 習題 15
第2章 控制流 17
2.1 布爾值 18
2.2 比較操作符 19
2.3 布爾操作符 20
2.3.1 二元布爾操作符 20
2.3.2 not操作符 21
2.4 混合布爾和比較操作符 21
2.5 控制流的元素 22
2.5.1 條件 22
2.5.2 代碼塊 22
2.6 程式執行 23
2.7 控制流語句 23
2.7.1 if語句 23
2.7.2 else語句 24
2.7.3 elif語句 25
2.7.4 while循環語句 30
2.7.5 惱人的循環 31
2.7.6 break語句 33
2.7.7 continue語句 34
2.7.8 for循環和range()函式 37
2.7.9 等價的while循環 39
2.7.10 range()的開始、停止和步長參數 39
2.8 導入模組 40from import語句 41
2.9 用sys.exit()提前結束程式 41
2.10 小結 41
2.11 習題 41
第3章 函式 43
3.1 def語句和參數 44
3.2 返回值和return語句 45
3.3 None值 46
3.4 關鍵字參數和print()47
3.5 局部和全局作用域 48
3.5.1 局部變數不能在全局作用域內使用 48
3.5.2 局部作用域不能使用其他局部作用域內的變數 49
3.5.3 全局變數可以在局部作用域中讀取 49
3.5.4 名稱相同的局部變數和全局變數 50
3.6 global語句 50
3.7 異常處理 52
3.8 一個小程式:猜數字 54
3.9 小結 55
3.10 習題 56
3.11 實踐項目 56
3.11.1 Collatz序列 56
3.11.2 輸入驗證 57
第4章 列表 59
4.1 列表數據類型 59
4.1.1 用下標取得列表中的單個值 60
4.1.2 負數下標 61
4.1.3 利用切片取得子列表 61
4.1.4 用len()取得列表的長度 62
4.1.5 用下標改變列表中的值 62
4.1.6 列表連線和列表複製 62
4.1.7 用del語句從列表中刪除值 63
4.2 使用列表 63
4.2.1 列表用於循環 64
4.2.2 in和notin操作符 65
4.2.3 多重賦值技巧 66
4.3 增強的賦值操作 66
4.4 方法 67
4.4.1 用index()方法在列表中查找值 67
4.4.2 用append()和insert()方法在列表中添加值 68
4.4.3 用remove()方法從列表中刪除值 69
4.4.4 用sort()方法將列表中的值排序 69
4.5 例子程式:神奇8球和列表 70
4.6 類似列表的類型:字元串和元組 71
4.6.1 可變和不可變數據類型 72
4.6.2 元組數據類型 73
4.6.3 用list()和tuple()函式來轉換類型 74
4.7 引用 75
4.7.1 傳遞引用 76
4.7.2 copy模組的copy()和deepcopy()函式 77
4.8 小結 78
4.9 習題 78
4.10 實踐項目 79
4.10.1 逗號代碼 79
4.10.2 字元圖格線 79
第5章 字典和結構化數據 81
5.1 字典數據類型 81
5.1.1 字典與列表 82
5.1.2 keys()、values()和items()方法 83
5.1.3 檢查字典中是否存在鍵或值 84
5.1.4 get()方法 84
5.1.5 setdefault()方法 85
5.2 漂亮列印 86
5.3 使用數據結構對真實世界建模 87
5.3.1 井字棋盤 88
5.3.2 嵌套的字典和列表 91
5.4 小結 92
5.5 習題 93
5.6 實踐項目 93
5.6.1 好玩遊戲的物品清單 93
5.6.2 列表到字典的函式,針對好玩遊戲物品清單 94
第6章 字元串操作 95
6.1 處理字元串 95
6.1.1 字元串字面量 95
6.1.2 雙引號 96
6.1.3 轉義字元 96
6.1.4 原始字元串 96
6.1.5 用三重引號的多行字元串 97
6.1.6 多行注釋 97
6.1.7 字元串下標和切片 98
6.1.8 字元串的in和notin操作符 98
6.2 有用的字元串方法 99
6.2.1 字元串方法upper()、lower()、isupper()和islower()99
6.2.2 isX字元串方法 100
6.2.3 字元串方法startswith()和endswith()102
6.2.4 字元串方法join()和split()102
6.2.5 用rjust()、ljust()和center()方法對齊文本 103
6.2.6 用strip()、rstrip()和lstrip()刪除空白字元 104
6.2.7 用pyperclip模組拷貝貼上字元串 105
6.3 項目:口令保管箱 106
第1步:程式設計和數據結構 106
第2步:處理命令行參數 106
第3步:複製正確的口令 107
6.4 項目:在Wiki標記中添加無序列表 108
第1步:從剪貼簿中複製和貼上 108
第2步:分離文本中的行,並添加星號 109
第3步:連線修改過的行 109
6.5 小結 110
6.6 習題 110
6.7 實踐項目 111
表格列印 111
第二部分 自動化任務
第7章 模式匹配與正則表達式 115
7.1 不用正則表達式來查找文本模式 116
7.2 用正則表達式查找文本模式 117
7.2.1 創建正則表達式對象 118
7.2.2 匹配Regex對象 118
7.2.3 正則表達式匹配複習 119
7.3 用正則表達式匹配更多模式 119
7.3.1 利用括弧分組 119
7.3.2 用管道匹配多個分組 120
7.3.3 用問號實現可選匹配 121
7.3.4 用星號匹配零次或多次 121
7.3.5 用加號匹配一次或多次 122
7.3.6 用花括弧匹配特定次數 122
7.4 貪心和非貪心匹配 123
7.5 findall()方法 124
7.6 字元分類 124
7.7 建立自己的字元分類 125
7.8 插入字元和美元字元 126
7.9 通配字元 126
7.9.1 用點—星匹配所有字元 127
7.9.2 用句點字元匹配換行 127
7.10 正則表達式符號複習 128
7.11 不區分大小寫的匹配 128
7.12 用sub()方法替換字元串 129
7.13 管理複雜的正則表達式 129
7.14 組合使用re.IGNORECASE、re.DOTALL和re.VERBOSE 130
7.15 項目:電話號碼和Email地址提取程式 130
第1步:為電話號碼創建一個正則表達式 131
第2步:為email地址創建一個正則表達式 132
第3步:在剪貼簿文本中找到所有匹配 132
第4步:所有匹配連線成一個字元串,複製到剪貼簿 133
第5步:運行程式 133
第6步:類似程式的構想 134
7.16 小結 134
7.17 習題 134
7.18 實踐項目 136
7.18.1 強口令檢測 136
7.18.2 strip()的正則表達式版本 136
第8章 讀寫檔案 137
8.1 檔案與檔案路徑 137
8.1.1 Windows上的倒斜槓以及OS X和Linux上的正斜槓 138
8.1.2 當前工作目錄 139
8.1.3 絕對路徑與相對路徑 139
8.1.4 用os.makedirs()創建新資料夾 140
8.1.5 os.path模組 140
8.1.6 處理絕對路徑和相對路徑 141
8.1.7 查看檔案大小和資料夾內容 142
8.1.8 檢查路徑有效性 143
8.2 檔案讀寫過程 144
8.2.1 用open()函式打開檔案 145
8.2.2 讀取檔案內容 145
8.2.3 寫入檔案 146
8.3 用shelve模組保存變數 147
8.4 用pprint.pformat()函式保存變數 148
8.5 項目:生成隨機的測驗試卷檔案 149
第1步:將測驗數據保存在一個字典中 149
第2步:創建測驗檔案,並打亂問題的次序 150
第3步:創建答案選項 151
第4步:將內容寫入測驗試卷和答案檔案 151
8.6 項目:多重剪貼簿 153
第1步:注釋和shelf設定 153
第2步:用一個關鍵字保存剪貼簿內容 154
第3步:列出關鍵字和載入關鍵字的內容 154
8.7 小結 155
8.8 習題 155
8.9 實踐項目 156
8.9.1 擴展多重剪貼簿 156
8.9.2 瘋狂填詞 156
8.9.3 正則表達式查找 156
第9章 組織檔案 157
9.1 shutil模組 158
9.1.1 複製檔案和資料夾 158
9.1.2 檔案和資料夾的移動與改名 158
9.1.3 永久刪除檔案和資料夾 160
9.1.4 用send2trash模組安全地刪除 160
9.2 遍歷目錄樹 161
9.7 用zipfile模組壓縮檔案 162
9.3.1 讀取ZIP檔案 163
9.3.2 從ZIP檔案中解壓縮 164
9.3.3 創建和添加到ZIP檔案 164
9.4 項目:將帶有美國風格日期的檔案改名為歐洲風格日期 165
第1步:為美國風格的日期創建一個正則表達式 165
第2步:識別檔案名稱中的日期部分 166
第3步:構成新檔案名稱,並對檔案改名 167
第4步:類似程式的想法 168
9.5 項目:將一個資料夾備份到一個ZIP檔案 168
第1步:弄清楚ZIP檔案的名稱 168
第2步:創建新ZIP檔案 169
第3步:遍歷目錄樹並添加到ZIP檔案。170
第4步:類似程式的想法 170
9.6 小結 171
9.7 習題 171
9.8 實踐項目 171
9.8.1 選擇性拷貝 171
9.8.2 刪除不需要的檔案 172
9.8.3 消除缺失的編號 172
第10章 調試 173
10.1 拋出異常 174
10.2 取得反向跟蹤的字元串 175
10.3 斷言 176
10.3.1 在交通燈模擬中使用斷言 177
10.3.2 禁用斷言 178
10.4 日誌 178
10.4.1 使用日誌模組 178
10.4.2 不要用print()調試 180
10.4.3 日誌級別 180
10.4.4 禁用日誌 181
10.4.5 將日誌記錄到檔案 182
10.5 IDLE的調試器 182
10.5.1 Go 183
10.5.2 Step 183
10.5.3 Over 183
10.5.4 Out 183
10.5.5 Quit 183
10.5.6 調試一個數字相加的程式 184
10.5.7 斷點 185
10.6 小結 187
10.7 習題 187
10.7 實踐項目 188
調試硬幣拋擲 188
第11章 從Web抓取信息 189
11.1 項目:利用webbrowser模組的mapIt.py 190
第1步:弄清楚URL 190
第2步:處理命令行參數 191
第3步:處理剪貼簿內容,載入瀏覽器 191
第4步:類似程式的想法 192
11.2 用requests模組從Web下載檔案 192
11.2.1 用requests.get()函式下載一個網頁 193
11.2.2 檢查錯誤 193
10.3 將下載的檔案保存到硬碟 194
10.4 HTML 195
10.4.1 學習HTML的資源 195
10.4.2 快速複習 195
10.4.3 查看網頁的HTML原始碼 196
10.4.4 打開瀏覽器的開發者工具 197
10.4.5 使用開發者工具來尋找HTML元素 198
10.5 用BeautifulSoup模組解析HTML 199
10.5.1 從HTML創建一個BeautifulSoup對象 200
10.5.2 用select()方法尋找元素 200
10.5.3 通過元素的屬性獲取數據 202
10.6 項目:“I’mFeelingLucky”Google查找 202
第1步:獲取命令行參數,並請求查找頁面 203
第2步:找到所有的結果 203第3步:針對每個結果打開Web瀏覽器 204
第4步:類似程式的想法 205
10.7 項目:下載所有XKCD漫畫 205
第1步:設計程式 206
第2步:下載網頁 207
第3步:尋找和下載漫畫圖像 207
第4步:保存圖像,找到前一張漫畫 208
第4步:類似程式的想法 209
10.8 用selenium模組控制瀏覽器 210
10.8.1 啟動selenium控制的瀏覽器 210
10.8.2 在頁面中尋找元素 211
10.8.3 點擊頁面 212
10.8.4 填寫並提交表單 212
10.8.5 傳送特殊鍵 213
10.8.6 點擊瀏覽器按鈕 213
10.8.7 關於selenium的更多信息 214
10.9 小結 214
10.10 習題 214
10.11 實踐項目 215
10.11.1 命令行郵件程式 215
10.11.2 圖像網站下載 215
10.11.32048215
10.11.4 連結驗證 215
第12章 處理Excel電子表格 217
12.1 Excel文檔 217
12.2 安裝openpyxl模組 218
12.3 讀取Excel文檔 218
12.3.1 用openpyxl模組打開Excel文檔 219
12.3.2 從工作簿中取得工作表 219
12.3.3 從表中取得單元格 220
12.3.4 列字母和數字之間的轉換 221
12.3.5 從表中取得行和列 222
12.3.6 工作薄、工作表、單元格 223
12.4 項目:從電子表格中讀取數據 223
第1步:讀取電子表格數據 224
第2步:填充數據結構 225
第3步:將結果寫入檔案 226
第4步:類似程式的思想 227
12.5 寫入Excel文檔 227
12.5.1 創建並保存Excel文檔 227
12.5.2 創建和刪除工作表 228
12.5.3 將值寫入單元格 229
12.6 項目:更新一個電子表格 229
第1步:利用更新信息建立數據結構 230
第2步:檢查所有行,更新不正確的價格 231
第4步:類似程式的思想 231
12.7 設定單元格的字型風格 232
12.8 Font對象 232
12.9 公式 234
12.10 調整行和列 235
12.10.1 設定行高和列寬 235
12.10.2 合併和拆分單元格 236
12.10.3 凍結窗格 237
12.10.4 圖表 238
12.11 小結 240
12.11 習題 240
12.12 實踐項目 241
12.12.1 乘法表 241
12.12.2 空行插入程式 241
12.12.3 電子表格單元格翻轉程式 242
12.12.4 文本檔案到電子表格 242
12.12.5 電子表格到文本檔案 242
第13章 處理PDF和Word文檔 243
13.1 PDF文檔 243
13.1.1 從PDF提取文本 244
13.1.2 解密PDF 245
13.1.3 創建PDF 246
13.1.4 拷貝頁面 246
13.1.5 旋轉頁面 247
13.1.6 疊加頁面 248
13.1.7 加密PDF 249
13.2 項目:從多個PDF中合併選擇的頁面 250
第1步:找到所有PDF檔案 250
第2步:打開每個PDF檔案 251
第3步:添加每一頁 252
第4步:保存結果 252
第5步:類似程式的想法 253
13.3 Word文檔 253
13.3.1 讀取Word文檔 254
13.3.2 從.docx檔案中取得完整的文本 254
13.3.3 設定Paragraph和Run對象的樣式 255
13.3.4 創建帶有非默認樣式的Word文檔 257
13.3.5 Run屬性 257
13.3.6 寫入Word文檔 258
13.3.7 添加標題 260
13.3.8 添加換行符和換頁符 261
13.3.9 添加圖像 261
13.4 小結 262
13.5 習題 262
13.6 實踐項目 263
13.6.1 PDF偏執狂 263
13.6.2 定製邀請函,保存為Word文檔 263
13.6.3 暴力PDF口令破解程式 264
第14章 處理CSV檔案和JSON數據 265
14.1 csv模組 265
14.2.1 Reader對象 266
14.2.2 在for循環中,從Reader對象讀取數據 267
14.2.3 Writer對象 268
14.2.4 delimiter和lineterminator關鍵字參數 269
14.3 項目:從CSV檔案中刪除表頭 269
第1步:循環遍歷每個CSV檔案 270
第2步:讀入CSV檔案 270
第3步:寫入CSV檔案,沒有
第一行 271
第4步:類似程式的想法 272
14.4 JSON和API 272
14.5 json模組 273
14.5.1 用loads()函式讀取
JSON 273
14.5.2 用dumps函式寫出
JSON 273
14.6 項目:取得當前的天氣數據 274
第1步:從命令行參數獲取位置 274
第2步:下載JSON數據 275
第3步:載入JSON數據並列印天氣 275
第4步:類似程式的想法 277
14.7 小結 277
14.8 習題 277
14.9 實踐項目 277
Excel到CSV的轉換程式 277
第15章 保持時間、計畫任務和啟動程式 279
15.1 time模組 279
15.1.1 time.time()函式 279
15.1.2 time.sleep()函式 280
15.2 數字四捨五入 281
15.3 項目:超級秒表 282
第1步:設定程式來記錄時間 282
第2步:記錄並列印單圈時間 283
第4步:類似程式的想法 283
15.4 datetime模組 284
15.4.1 timedelta數據類型 285
15.4.2 暫停直至特定日期 286
15.4.3 將datetime對象轉換為字元串 287
15.4.4 將字元串轉換成datetime對象 288
15.5 回顧Python的時間函式 288
15.6 多執行緒 289
15.6.1 向執行緒的目標函式傳遞參數 290
15.6.2 並發問題 291
15.7 項目:多執行緒XKCD下載程式 291
第1步:修改程式以使用函式 292
第2步:創建並啟動執行緒 293
第3步:等待所有執行緒結束 293
15.8 從Python啟動其他程式 294
15.8.1 向Popen()傳遞命令行參數 295
15.8.2 TaskScheduler、launchd和
cron 296
15.8.3 用Python打開網站 296
15.8.4 運行其他Python腳本 296
15.8.5 用默認的應用程式打開檔案 297
15.9 項目:簡單的倒計時程式 298
第1步:倒計時 298
第2步:播放聲音檔案 298
第3步:類似程式的想法 299
15.10 小結 299
15.11 習題 300
15.12 實踐項目 300
15.12.1 美化的秒表 300
15.12.2 計畫的Web漫畫下載 301
第16章 傳送電子郵件和簡訊 303
16.1 SMTP 303
16.2 傳送電子郵件 304
16.2.1 連線到SMTP伺服器 304
16.2.2 傳送SMTP的“Hello”訊息 305
16.2.3 開始TLS加密 306
16.2.4 登錄到SMTP伺服器 306
16.2.5 傳送電子郵件 306
16.2.6 從SMTP伺服器斷開 307
16.3 IMAP 307
16.4 用IMAP獲取和刪除電子郵件 307
16.4.1 連線到IMAP伺服器 308
16.4.2 登錄到IMAP伺服器 309
16.4.3 搜尋電子郵件 309
16.4.4 選擇資料夾 309
16.4.5 執行搜尋 310
16.4.6 大小限制 312
16.4.7 取郵件並標記為已讀 312
16.4.8 從原始訊息中獲取電子郵件地址 313
16.4.9 從原始訊息中獲取正文 314
16.4.10 刪除電子郵件 315
16.4.11 從IMAP伺服器斷開 315
16.5 項目:向會員傳送會費提醒電子郵件 316
第1步:打開Excel檔案 316
第2步:查找所有未付成員 317
第3步:傳送定製的電子郵件提醒 318
16.6 用Twilio傳送簡訊 319
16.6.1 註冊Twilio賬號 319
16.6.2 傳送簡訊 320
16.7 項目:“只給我發簡訊”模組 321
16.8 小結 322
16.9 習題 323
16.10 實踐項目 323
16.10.1 隨機分配家務活的電子郵件程式 323
16.10.2 傘提醒程式 324
16.10.3 自動退訂 324
16.10.4 通過電子郵件控制你的電腦 324
第17章 操作圖像 327
17.1 計算機圖像基礎 327
17.1.1 顏色和RGBA值 328
17.1.2 坐標和Box元組 329
17.2 用Pillow操作圖像 330
17.2.1 處理Image數據類型 331
17.2.2 裁剪圖片 332
17.2.3 複製和貼上圖像到其他圖像 333
17.2.4 調整圖像大小 335
17.2.5 旋轉和翻轉圖像 336
17.2.6 更改單個像素 338
17.3 項目:添加徽標 339
第1步:打開徽標圖像 340
第2步:遍歷所有檔案並打開圖像 341
第3步:調整圖像的大小 341
第4步:添加徽標,並保存更改 342
第5步:類似程式的想法 343
17.4 在圖像上繪畫 344
17.4.1 繪製形狀 344
17.4.2 繪製文本 346
17.5 小結 347
17.6 習題 348
17.7 實踐項目 348
17.7.1 擴展和修正本章項目的程式 348
17.7.2 在硬碟上識別照片資料夾 349
17.7.3 定製的座位卡 350
第18章 用GUI自動化控制鍵盤和滑鼠 351
18.1 安裝pyautogui模組 351
18.2 走對路 352
18.2.1 通過註銷關閉所有程式 352
18.2.2 暫停和自動防故障裝置 352
18.3 控制滑鼠移動 353
18.3.1 移動滑鼠 354
18.3.2 獲取滑鼠位置 354
18.4 項目:“現在滑鼠在哪裡?”355
第1步:導入模組 355
第2步:編寫退出代碼和無限循環 355
第3步:獲取並列印滑鼠坐標。356
18.5 控制滑鼠互動 357
18.5.1 點擊滑鼠 357
18.5.2 拖動滑鼠 357
18.5.3 滾動滑鼠 359
18.6 處理螢幕 360
18.6.1 獲取螢幕快照 360
18.6.2 分析螢幕快照 360
18.7 項目:擴展mouseNow程式 361
18.8 圖像識別 362
18.9 控制鍵盤 363
18.9.1 通過鍵盤傳送一個字元串 363
18.9.2 鍵名 364
18.9.3 按下和釋放鍵盤 365
18.9.4 熱鍵組合 365
18.10 複習PyAutoGUI的函式 366
18.11 項目:自動填表程式 367
第1步:弄清楚步驟 368
第2步:建立坐標 368
第3步:開始鍵入數據 370
第4步:處理選擇列表和單選按鈕 371
第5步:提交表單並等待 372
18.12 小結 372
18.13 習題 373
18.14 實踐項目 373
18.14.1 看起來很忙 373
18.14.2 即時通信機器人 373
18.14.3 玩遊戲機器人指南 374
附錄A 安裝第三方模組 375
附錄B 運行程式 377
附錄C 習題答案 381