日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

AutomateTheBoringStuffWithPython

發布時間:2023/12/16 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AutomateTheBoringStuffWithPython 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一部分 Python編程基礎

第 1 章 Python 基礎

1.1 在交互式環境中輸入表達式

操作符**%///*-+
操作指數取模/取余數整除/商數取整
增強的賦值語句等價的賦值語句
spam += 1spam = spam + 1
spam -= 1spam = spam - 1
spam *= 1spam = spam * 1
spam /= 1spam = spam / 1
spam %= 1spam = spam % 1

1.2 整型、浮點型和字符串數據類型

int float char

1.3 字符串連接和復制

連接:+

>>>'Hello' + ',' + 'World' 'Hello,World'

復制:*

>>>'hello' * 3 hellohellohello

1.4 在變量中保存值

1.4.1 賦值語句

賦值語句包含一個變量名、一個等號(稱為賦值操作符),以及要存儲的值。

>>>apple = 520 >>>apple 520 >>>apple=apple + 1 >>>apple 521

1.4.2 變量名

1.只能是一個詞。

2.只能包含字母、數字和下劃線。

3.不能以數字開頭。

1.5 程序剖析

# This is annotation. This program says hello and asks for my name. print('Hello world!') # print()函數將括號內的字符串顯示在屏幕上。 print('What is your name?') # ask for their name myName = input() print('It is good to meet you, ' + myName) # 打印用戶名字 print('The length of your name is:') print(len(myName)) print('What is your age?') # ask for their age myAge = input() # 函數等待用戶在鍵盤上輸入一些文本,并按下回車鍵。 print('You will be ' + str(int(myAge) + 1) + ' in a year.')

第 2 章 控制流

2.1 操作符類型

類型內容
Boolean(布爾)值True、False
比較操作符==、!=、<、>、<=、>=
布爾操作符and、or、not

2.2 控制流的元素

2.2.1 if/else/elif

if name == 'Alice': print('Hi, Alice.') elif age < 12:print('You are not Alice, kiddo.') else:print('You are neither Alice nor a little kid.')

2.2.2 while 循環語句

在代碼中,while 語句總是包含下面幾部分:

  • 關鍵字;
  • 條件(求值為 True 或 False 的表達式);
  • 冒號;
  • 從新行開始,縮進的代碼塊(稱為 while 子句)。
# 當n<5時,輸出Hello, world. n = 0 while n < 5:print('Hello, world.')n = n + 1
2.2.2.1 break語句
# 讓執行提前跳出 while 循環子句 while True:print('Please type your name.')name = input() if name == 'your name': break print('Thank you!')
2.2.2.2 continue語句
# 像 break 語句一樣,continue 語句用于循環內部。如果程序執行遇到 continue 語句,就會馬上跳回到循環開始處,重新對循環條件求值 while True:print('Who are you?')name = input()if name != 'Joe': continue print('Hello, Joe. What is the password? (It is a fish.)') password = input() if password == 'swordfish':break print('Access granted.')

2.2.3 for 循環語句

在代碼中,for 語句總是包含以下部分:

  • for 關鍵字;
  • 一個變量名;
  • in 關鍵字;
  • 調用 range()方法,最多傳入 3 個參數;
  • 冒號;
  • 從下一行開始,縮退的代碼塊(稱為 for 子句)。
# 計算55-99之間奇數的和 total = 0 for num in range(55, 100, 2) # range()取值 -> [,)total = total + num

2.4 導入模塊

在開始使用一個模塊中的函數之前,必須用 import 語句導入該模塊。在代碼中,

import 語句包含以下部分:

  • import 關鍵字;
  • 模塊的名稱;
  • 可選的更多模塊名稱,之間用逗號隔開。
# 連續5次輸出1~10之間任意的數字 import random for i in range(5):print(random.randint(1, 10))# 導入不同的模塊 import random, sys, os, math

from import 語句包含以下部分

  • from關鍵字;
  • 模塊的名稱;
  • import關鍵字和一個*。
from random import*

使用這種形式的 import 語句,調用 random模塊中的函數時不需要 random.前綴。但是,使用完整的名稱會讓代碼更可讀,所以最好是使用普通形式的 import 語句。

2.5 用 sys.exit()提前結束程序

當程序執行到指令的底部時,總是會終止。但是,通過調用 sys.exit()函數,可以讓程序終止或退出。因為這個函數在 sys 模塊中,所以必須先導入 sys,才能使用它。

import sys while True:print('Type exit to exit.')response = input()if response == 'exit':sys.exit() print('You typed ' + response + '.')

第 3 章 函數

3.1 def 語句和return語句

import random def getAnswer(answerNumber):if answerNumber == 1: return 'apple' elif answerNumber == 2:return 'egg' elif answerNumber == 3 or answerNumber == 4:return 'Yes' elif answerNumber == 5:print('hello, ', end = '')print('world')return 'hello, world'elif answerNumber == 6:print('hello,')print('world')return 'hello, \nworld'else:return None # NoneType for i in range(1, 11):print(getAnswer(random.randint(1, 9)))print('\n\n')

3.2 局部和全局作用域

在被調用函數內賦值的變元和變量,處于該函數的“局部作用域”。在所有函數之外賦值的變量,屬于“全局作用域”。處于局部作用域的變量,被稱為“局部變量”。處于全局作用域的變量,被稱為“全局變量”。一個變量必是其中一種,不能既是局部的又是全局的。

作用域很重要,理由如下:

  • 全局作用域中的代碼不能使用任何局部變量;

    def sum(i):other = 2return i + other print(sum(1)) print(other)========================= RESTART: M:/python/test003.py ======================== 3 Traceback (most recent call last):File "M:/python/test003.py", line 5, in <module>print(other) NameError: name 'other' is not defined
  • 但是,局部作用域可以訪問全局變量;

  • 一個函數的局部作用域中的代碼,不能使用其他局部作用域中的變量。

    def one():a = 1print(a)def two():b = 2one()print(b)print(b + a)two()========================= RESTART: M:/python/test004.py ======================== 1 2 Traceback (most recent call last):File "M:/python/test004.py", line 11, in <module>two()File "M:/python/test004.py", line 9, in twoprint(b + a) NameError: name 'a' is not defined def one():a = 1print(a)def two():b = 2one()print(b)two()========================= RESTART: M:/python/test004.py ======================== 1 2
  • (盡量避免)如果在不同的作用域中,你可以用相同的名字命名不同的變量。也就是說,可以有一個名為 one 的局部變量,和一個名為 one 的全局變量。

    def test1():one = 'local1' print(one) # prints 'local1' def test2():one = 'local2' print(one) # prints 'local2'test1()print(one) # prints 'local2' one = 'global' test2() print(one) # prints 'global'========================= RESTART: M:\python\test005.py ======================== local2 local1 local2 global
  • 全局變量可以在局部作用域中讀取

    def test():print(eggs) eggs = 42 test() print(eggs)
  • global 語句

    def localProcess():global appleapple = 520 apple = 1314 localProcess() print(apple)========================= RESTART: M:\python\test006.py ======================== 520

3.3 異常處理

到目前為止,在 Python 程序中遇到錯誤,或“異常”,意味著整個程序崩潰。錯誤可以由 try 和 except 語句來處理。那些可能出錯的語句被放在 try 子句中。如果錯誤發生,程序執行就轉到接下來的 except 子句開始處。

def test(divideBy):try:return 42 / divideBy except ZeroDivisionError:print('Error: Invalid argument.') print(test(2)) print(test(12)) print(test(0)) print(test(1))========================= RESTART: M:\python\test007.py ======================== 21.0 3.5 Error: Invalid argument. None 42.0

第 4 章 列表、字符串、元組

4.1 列表數據類型

“列表”是一個值,它包含多個字構成的序列。術語“列表值”指的是列表本身(它作為一個值,可以保存在變量中,或傳遞給函數,像所有其他值一樣),而不是指列表值之內的那些值。列表中的值也稱為“表項”。表項用逗號分隔,以方括號結束。

test = ['cat', 'bat', 'rat', 'elephant']# 用下標取得列表中的單個值 test[0] # 'cat' test[3] # 'elephant' test[4] # IndexError test[0.5] # TypeError# 負數下標 test[-1] # 'elelhant' test[-4] # 'cat'# 利用切片取得子列表 [,) test[0:2] # ['cat', 'bat'] test[0:-1] # ['cat', 'bat', 'rat'] spam[1:] # ['bat', 'rat', 'elephant'] spam[:] # ['cat', 'bat', 'rat', 'elephant']# 用 len()取得列表的長度 len(test) # 4# 用下標改變列表中的值 test[0] = 'apple' test # ['apple', 'bat', 'rat', 'eleplant']# 列表連接和列表復制 add = ['add'] total = test + add total # ['apple', 'bat', 'rat', 'eleplant', 'add'] add * 3 # ['add', 'add', 'add']# 用 del 語句從列表中刪除值 del total[4] total == test # true

4.2 使用列表

當你第一次開始編程時,很容易會創建許多獨立的變量,來保存一組類似的值。實際上,不必使用多個重復的變量,你可以使用單個變量,包含一個列表值。

catNames = [] while True:print('Enter the name of cat ' + str(len(catNames) + 1) + ' (Or enter nothing to stop.):') name = input()if name == '':break catNames = catNames + [name] # list concatenation print('The cat names are:') for name in catNames:print(' ' + name)# 列表用于循環 for i in range(len(catNames)):print('Index ' + str(i) + ' in catNames is: ' + catNames[i])# in 和 not in 操作符 'AAA' in catNames 'AAA' not in catNames# 多重賦值 cat = ['fat', 'black', 'loud'] size, color, disposition = cat# 增強賦值 cat += 'rap' cat # ['fat', 'black', 'loud', 'rap']

變量的數目和列表的長度必須嚴格相等,否則 Python 將給出 ValueError

4.3 方法

方法和函數是一回事,只是它是調用在一個值上。方法部分跟在這個值后面,以一個句點分隔。每種數據類型都有它自己的一組方法。例如,列表數據類型有一些有用的方法,用來查找index、添加append/insert、刪除remove/del或操作sort列表中的值。

# 用 index()方法在列表中查找值 test = ['aa', 'bb', 'cc', 'cc'] test.index['aa'] # 0 test.index['cc'] # 2 test.index['dd'] # ValueRError# 用 append()和 insert()方法在列表中添加值 test.append('ee') test # ['aa', 'bb', 'cc', 'cc', 'ee']test.insert(0, '00') test # ['00', 'aa', 'bb', 'cc', 'cc', 'ee']# 用 remove()方法從列表中刪除值 test.remove('00') test # ['aa', 'bb', 'cc', 'cc', 'ee'] test.remove('00') # ValueErrortest.remove('cc') test # ['aa', 'bb', 'cc', 'ee'] remove the first# 用 del()方法從列表中刪除值 del(test[0]) test # ['bb', 'cc', 'ee']# 用 sort()方法將列表中的值按 ASCII 字符順序排序 test.sort(reverse=True) # 逆序 test # ['ee', 'cc', 'bb'] test.sort() # 順序 test # ['bb', 'cc', 'ee']test0 = [1, 2, 3, 'a', 'b', 'c'] # 對既有數字又有字符串值的列表 test.sort() # TypeError# 按照普通的字典順序排序 test1 = ['a', 'x', 'B', 'M'] test1.sort() test1 # ['B', 'M', 'a', 'x'] test1.sort(key=str.lower) test1 # ['a', 'B', 'M', 'x']

4.4 字符串

列表并不是唯一表示序列值的數據類型。例如,字符串和列表實際上很相似,只要你認為字符串是單個文本字符的列表。對列表的許多操作,也可以作用于字符串:按下標取值、切片、用于 for 循環、用于 len(),以及用于 in 和 not in 操作符。

>>> name = 'Zophie' >>> name[0] 'Z' >>> name[-2] 'i' >>> name[0:4] 'Zoph' >>> 'Zo' in name True >>> 'z' in name False >>> 'p' not in name False >>> for i in name:print('* * * ' + i + ' * * *') * * * Z * * * * * * o * * * * * * p * * * * * * h * * * * * * i * * * * * * e * * *

但列表和字符串在一個重要的方面是不同的。**列表是“可變的”數據類型,它的值可以添加、刪除或改變。 ** 但是,字符串是“不可變的”,它不能被更改。 嘗試對字符串中的一個字符重新賦值,將導致 TypeError 錯誤。

>>> name = 'Zophie a cat' >>> name[7] = 'the' Traceback (most recent call last):File "<pyshell#50>", line 1, in <module>name[7] = 'the' TypeError: 'str' object does not support item assignment>>> name = 'Zophie a cat' >>> newName = name[0:7] + 'the' + name[8:12] >>> name 'Zophie a cat' >>> newName 'Zophie the cat'

4.5 元組

除了兩個方面,“元組”數據類型幾乎與列表數據類型一樣。首先,元組輸入時用圓括號(),而不是用方括號[]。但元組與列表的主要區別還在于,元組像字符串一樣,是不可變的。元組不能讓它們的值被修改、添加或刪除。

>>> eggs = ('hello', 42, 0.5) >>> eggs[0] 'hello' >>> eggs[1:3] (42, 0.5) >>> len(eggs) 3

如果元組中只有一個值,你可以在括號內該值的后面跟上一個逗號,表明這種情況。

>>> type(('hello',)) <class 'tuple'> >>> type(('hello')) <class 'str'>

你可以用元組告訴所有讀代碼的人,你不打算改變這個序列的值。如果需要一個永遠不會改變的值的序列,就使用元組。使用元組而不是列表的第二個好處在于,因為它們是不可變的,它們的內容不會變化,Python 可以實現一些優化,讓使用元組的代碼比使用列表的代碼更快。

4.6 類型轉換與引用

4.6.1 類型轉換

函數 str()、 list()、 tuple()將返回傳遞給它們的值的字符串、列表、元組版本。

4.6.2 引用

變量保存字符串或整數值,如將 42 賦給 spam 變量,然后拷貝 spam 中的值,將它賦給變量 cheese。當稍后將 spam 中的值改變為 100 時,這不會影響 cheese 中的值。這是因為 spam 和 heese是不同的變量,保存了不同的值。

>>> spam = 42 >>> cheese = spam >>> spam = 100 >>> spam 100 >>> cheese 42

但列表不是這樣的。當你將列表賦給一個變量時,實際上是將列表的“引用”賦給了該變量。引用是一個值,指向某些數據。列表引用是指向一個列表的值。

>>> spam = [0, 1, 2, 3, 4, 5] >>> cheese = spam >>> cheese[1] = 'Hello!' >>> spam [0, 'Hello!', 2, 3, 4, 5] >>> cheese [0, 'Hello!', 2, 3, 4, 5]
4.6.2.1 傳遞引用
def eggs(someParameter):someParameter.append('Hello') spam = [1, 2, 3] eggs(spam) print(spam)
4.6.2.2 copy 模塊的 copy()和deepcopy()函數
>>> import copy >>> spam = ['A', 'B', 'C', 'D'] >>> cheese = copy.copy(spam) >>> cheese[1] = 42 >>> spam ['A', 'B', 'C', 'D'] >>> cheese ['A', 42, 'C', 'D']

如果要復制的列表中包含了列表,那就使用 copy.deepcopy()函數來代替。deepcopy()函數將同時復制它們內部的列表。

第 5 章 字典和結構化數據

5.1 字典數據類型

像列表一樣,“字典”是許多值的集合。但不像列表的下標,字典的索引可以使用許多不同數據類型,不只是整數。字典不是只能使用整數下標,而是可以用各種數據類型作為鍵:整型、浮點型、字符串或元組。 字典的索引被稱為“鍵”,鍵及其關聯的值稱為“鍵-值”對。在代碼中,字典輸入時帶花括號{}。字典方法**keys()、values()和 items()**將返回類似列表的值,分別對應于字典的鍵、值和鍵-值對。這些數據類型(分別是 dict_keys、dict_values 和 dict_items)可以用于for 循環。

>>> myCat = {'size': 'fat', 'color': 'gray'} >>> myCat['size'] 'fat' >>> 'My cat has ' + myCat['color'] + ' fur.' 'My cat has gray fur.'>>> for k in myCat.keys():print(k) size color >>> for i in myCat.items():print(i) ('size', 'fat') ('color', 'gray')# 檢查字典中是否存在鍵或值' >>> 'color' in myCat True >>> 'gray' not in myCat.keys() False# get() >>> 'This is a ' + str(myCat.get('color', 0)) + ' cat' 'This is a gray cat'# setdefault() -> 為字典中某個鍵設置一個默認值,當該鍵沒有任何值時使用它 >>> myCat.setdefault('name', 'Tony') 'Tony' >>> myCat {'size': 'fat', 'color': 'gray', 'name': 'Tony'} >>> myCat.setdefault('color', 'white') 'gray' >>> myCat {'size': 'fat', 'color': 'gray', 'name': 'Tony'}

5.2 漂亮打印

import pprint message = 'It was a bright cold day in April, and the clocks were striking thirteen.' count = {}for character in message:count.setdefault(character, 0)count[character] = count[character] + 1# 顯示在屏幕上 pprint.pprint(count) # (1) print(pprint.pformat(myCat)) # (2)# 得到漂亮打印的文本作為字符串 pprint.pformat(myCat)

5.3 使用數據結構對真實世界建模

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 章 字符串操作

6.1 處理字符串

>>> myCat = "Tis is Tony's cat" # 雙引號中可使用單引號 >>> myCat "Tis is Tony's cat" >>> myCat = 'This is Tony\'s cat' # 轉義字符 倒斜杠\ >>> myCat "Tis is Tony's cat" >>> myCat = r'This is Tony\'s cat' # 原始字符串 >>> myCat "This is Tony\\'s cat"# 用三重引號的多行字符串 # 多行注釋 “”“This is a letter to my son. Please send to he. ”“”>>> print('''Dear Son,Nice to meet you! Yours trutly Tiny''') Dear Son,Nice to meet you! Yours trutly Tiny# 字符串下標和切片 >>> helloWorld = 'Hello World' >>> helloWorld[:] 'Hello World' >>> len(helloWorld) 11 >>> helloWorld[0:6] 'Hello ' >>> helloWorld[5:] ' World' >>> fizz = helloWorld[4:10] >>> fizz = helloWorld[4:10] >>> fizz 'o Worl'# 字符串的 in 和 not in 操作符 >>> 'hello' in helloWorld False >>> 'Hello' in helloWorld True >>> 'world' not in helloWorld True

6.2 有用的字符串方法

6.2.1 字符串方法 upper()、lower()、isX()

test = 'Hello, World!' >>> test.upper() 'HELLO, WORLD!' >>> test.lower() 'hello, world!' >>> test 'Hello, World!' >>> test.isupper() False >>> test.islower() False>>> 'abcd'.isalpha() # 只包含字母,并且非空 True >>> 'hello123'.isalnum() # 只包含字母和數字,并且非空 False >>> ' \t\n'.isspace() # 只包含空格、制表符和換行,并且非空 True >>> '123'.isdecimal() # 只包含數字字符,并且非空 False >>> 'This is a cat' # 僅包含以大寫字母開頭、后面都是小寫字母的單詞 True

6.2.2 字符串方法 startswith()和endswith()

如果它們所調用的字符串以該方法傳入的字符串開始或結束,startswith()和 endswith()方法返回 True。否則,方法返回 False。

>>> 'Hello world!'.startswith('Hello') True >>> 'Hello world!'.endswith('world!') True >>> 'abc123'.startswith('abcdef') False >>> 'abc123'.endswith('12') False >>> 'Hello world!'.startswith('Hello world!') True >>> 'Hello world!'.endswith('Hello world!') True

6.2.3 字符串方法 join()和split()

>>> ' '.join(['My', 'name', 'is', 'Tony']) 'My name is Tony' >>> letter = ('''Dear Son,Nice to meet you! Yours trutly Tiny''') >>> letter.split('\n') ['Dear Son,', '\tNice to meet you!', 'Yours trutly', 'Tiny']

6.2.4 用 rjust()、ljust()和 center()方法對齊文本

rjust()和 ljust()字符串方法返回調用它們的字符串的填充版本,通過插入填充字符來對齊文本。center()字符串方法與 ljust()與 rjust()類似,但它讓文本居中,而不是左對齊或右對齊。

>>> 'hello'.rjust(10, '*') '*****hello' >>> 'hello'.ljust(10, '*') 'hello*****' >>> 'hello'.center(11, '*') '***hello***'

6.2.5 用 strip()、rstrip()和 lstrip()刪除空白字符

>>> test = ' hello world ' >>> test.strip() 'hello world' >>> test.lstrip() 'hello world ' >>> test.rstrip() ' hello world' >>> test.strip(' hdl') 'ello wor' >>> test.rstrip(' hdl') ' hello wor' >>> test.lstrip(' hdl') 'ello world '

6.2.6 用 pyperclip 模塊拷貝copy()粘貼paste()字符串

>>> import pyperclip >>> pyperclip.copy('Hello world!') >>> pyperclip.paste() 'Hello world!'

6.3 項目:口令保管箱

第 1 步:程序設計和數據結構

第 2 步:處理命令行參數

第 3 步:復制正確的口令

6.4 項目:在 Wiki 標記中添加無序列表

第 1 步:從剪貼板中復制和粘貼

第 2 步:分離文本中的行,并添加星號

第 3 步:連接修改過的行

第二部分 自動化任務

第 7 章 模式匹配與正則表達式

7.1 不用正則表達式來查找文本模式

def isPhoneNumber(text):if len(text) != 13: return False for i in range(0, 3):if not text[i].isdecimal(): return Falseif text[3] != '-':return False for i in range(4, 8): if not text[i].isdecimal(): return Falseif text[8] != '-':return False for i in range(9, 13):if not text[i].isdecimal(): return Falsereturn True print('151-8674-4242 is a phone number:') print(isPhoneNumber('151-8674-4242'))

7.2 用正則表達式(regex)查找文本模式

# 1.創建正則表達式對象 import re phoneNumRegex = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d')# 2.匹配 Regex 對象 mo = phoneNumRegex.search('My number is 151-8674-4242.') print('Phone number found: ' + mo.group()) ## Phone number found: 151-8674-4242# 利用括號分組 phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d\d)-(\d\d\d\d)') mo = phoneNumRegex.search('My number is 151-8674-4242.') mo.groups() # ('151', '8674', '4242') mo.groups(0) # '151-8674-4242' mo.groups(1) # '151'# 用管道匹配多個分組 testRegex = re.compile(r'good|bad') mo = testRegex.search('Today is good, though yesterday was bad') mo.group() # 'good'mo = testRegex.search('Though yesterday was bad, today is good') mo.group() # 'bad'testRegex = re.compile(r'(goo|ba)d') mo = testRegex.search('Today is good, though yesterday was bad') mo.group() # 'good' mo.group(1) # 'goo'# 用問號實現可選匹配# 用星號匹配零次或多次# 用加號匹配一次或多次# 用花括號匹配特定次數

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.IGNOREC ASE、

re.DOTALL 和re.VERBOSE130

7.15 項目:電話號碼和 E-mail 地址提取程序130

第 1 步:為電話號碼創建一個正則表達式131

第 2 步:為 E-mail 地址創建一個正則表達式132

第 3 步:在剪貼板文本中找到所有匹配132

第 4 步:所有匹配連接成一個字符串,復制到剪貼板133

第 5 步:運行程序133

第 6 步:類似程序的構想.134

第 8 章 讀寫文件

8.1 文件與文件路徑 137

8.1.1 Windows 上的倒斜杠以及OS X 和 Linux 上的正斜杠

8.1.2 當前工作目錄

8.1.3 絕對路徑與相對路徑

8.1.4 用 os.makedirs()創建新文件夾

8.1.5 os.path 模塊

8.1.6 處理絕對路徑和相對路徑

8.1.7 查看文件大小和文件夾內容

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歡迎加入非盈利Python編程學習交流QQ群783462347,群里免費提供500+本Python書籍!

目 錄

第 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 章 組織文件

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.3 用 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 章 調試

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歡迎加入非盈利Python編程學習交流QQ群783462347,群里免費提供500+本Python書籍!

目 錄

10.7 習題.187

10.8 實踐項目188

第 11 章 從 Web 抓取信息

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

11.3 將下載的文件保存到硬盤194

11.4 HTML .195

11.4.1 學習 HTML 的資源.195

11.4.2 快速復習.195

11.4.3 查看網頁的 HTML

源代碼.196

11.4.4 打開瀏覽器的開發者

工具197

11.4.5 使用開發者工具來尋找

HTML 元素198

11.5 用 BeautifulSoup 模塊解析

HTML.199

11.5.1 從 HTML 創建一個

BeautifulSoup 對象200

11.5.2 用select()方法尋找元素.200

11.5.3 通過元素的屬性獲取

數據202

11.6 項目:“I’m Feeling Lucky”

Google 查找.202

第1步:獲取命令行參數,并請求

查找頁面 203

第2步:找到所有的結果 .203

第 3 步:針對每個結果打開 Web

瀏覽器 204

第 4 步:類似程序的想法 .205

11.7 項目:下載所有 XKCD

漫畫 205

第 1 步:設計程序 206

第 2 步:下載網頁 207

第 3 步:尋找和下載漫畫圖像207

第 4 步:保存圖像,找到前一張

漫畫 208

第 5 步:類似程序的想法 .209

11.8 用 selenium 模塊控制瀏覽器 210

11.8.1 啟動 selenium 控制的

瀏覽器 .210

11.8.2 在頁面中尋找元素211

11.8.3 點擊頁面 .212

11.8.4 填寫并提交表單212

11.8.5 發送特殊鍵 213

11.8.6 點擊瀏覽器按鈕213

11.8.7 關于 selenium 的更多

信息 214

11.9 小結 214

11.10 習題 214

11.11 實踐項目. 215

11.11.1 命令行郵件程序215

11.11.2 圖像網站下載215

11.11.3 2048.215

11.11.4 鏈接驗證215

第 12 章 處理 Excel 電子表格

12.1 Excel 文檔 217

12.2 安裝 openpyxl 模塊 218

12.3 讀取 Excel 文檔. 218

12.3.1 用 openpyxl 模塊打開 Excel歡迎加入非盈利Python編程學習交流QQ群783462347,群里免費提供500+本Python書籍!

目 錄

文檔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

第 3 步:類似程序的思想.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.12 習題 240

12.13 實踐項目.241

12.13.1 乘法表241

12.13.2 空行插入程序 .241

12.13.3 電子表格單元格翻轉

程序 242

12.13.4 文本文件到電子表格242

12.13.5 電子表格到文本文件242

第 13 章 處理 PDF 和 Word 文檔

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歡迎加入非盈利Python編程學習交流QQ群783462347,群里免費提供500+本Python書籍!

目 錄

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.1.1 Reader 對象266

14.1.2 在 for 循環中,從 Reader

對象讀取數據267

14.1.3 Writer 對象.268

14.1.4 delimiter 和 lineterminator

關鍵字參數269

14.2 項目:從 CSV 文件中刪除

表頭 269

第 1 步:循環遍歷每個 CSV

文件270

第 2 步:讀入 CSV 文件 270

第 3 步:寫入 CSV 文件,沒有

第一行271

第 4 步:類似程序的想法.272

14.3 JSON 和 API272

14.4 json 模塊273

14.4.1 用 loads()函數讀取

JSON 273

14.4.2 用 dumps 函數寫出

JSON 273

14.5 項目:取得當前的天氣數據274

第 1 步:從命令行參數獲取

位置274

第 2 步:下載 JSON 數據275

第 3 步:加載 JSON 數據并打印

天氣275

第 4 步:類似程序的想法 .277

14.6 小結 277

14.7 習題 277

14.8 實踐項目 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

第 3 步:類似程序的想法 .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 Task Scheduler、launchd 和歡迎加入非盈利Python編程學習交流QQ群783462347,群里免費提供500+本Python書籍!

目 錄

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 SMTP303

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歡迎加入非盈利Python編程學習交流QQ群783462347,群里免費提供500+本Python書籍!

目 錄

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

總結

以上是生活随笔為你收集整理的AutomateTheBoringStuffWithPython的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。