指導教師:李菊權(0921-763623)
python(版本3.8.2)
安裝至環境變數(Windows10)
- Add Python 3.8 to PATH
若沒勾選,需自行到(以下兩種方式進入環境變數設定)
- 本機 ▸ 內容
- 控制台 ▸ 系統及安全性 ▸ 系統
進階系統設定 ▸ 系統內容 ▸ 進階 ▸ 環境變數
將python.exe目錄新增至環境變數
(PATH ▸ 編輯 ▸ 新增)
|
|
Python介紹
Python 動態型別(強型別)/直譯式語言
- 動態型別:使用變數時不須預先宣告型別,依照設定之值而變。
- 強型別:不同型別無法進行運算。
- 直譯式語言:不須經過編譯即可直接執行。
- 副檔名:.py
IDLE
- python官方提供的IDE
推薦開發環境 Anaconda
- Spyder - 整合開發程式
Python Shell (REPL)
Python Shell (REPL) 模式
進入Python Shell (REPL)
|
|
離開Python Shell (REPL)
|
|
清除當前Python Shell Screen
|
|
Python Plugin
作業系統模組 - os
- 載入模組
|
|
- 打開系統的指定程式 - os.system(
程式名
)
|
|
- 列出目錄中所有檔案 - os.listdir(
路徑
)
|
|
- 取得當前目錄 - os.getcwd()
|
|
- 檢查目錄是否存在 - os.path.isdir(
目錄路徑
)
|
|
- 檢查檔案是否存在 - os.path.isfile(
檔案路徑
)
|
|
- 檢查路徑是否存在 - os.path.exists(
目錄路徑
)
|
|
- 於指定路徑建立目錄 - os.mkdir(
路徑+目錄名
)
|
|
影像處理模組 - PIL(Pillow)
- 安裝 PIL 模組
|
|
- 載入模組
|
|
- 打開圖檔 - .open(
圖檔路徑
)
|
|
- 存檔 - .save("
檔名
", “[格式
]”, [quality = 壓縮值(通常設定80或90)
], [subsampling = 0
])
|
|
PIL常用的圖檔格式
格式 |
---|
BMP 、EPS 、GIF 、JPEG 、JPG 、PNG 、TIFF 、PDF |
- 調整圖片尺寸 - .resize((
寬
,高
) [,filter(濾波)設定
])
不會自動等比例縮放,需等比例縮放得自行計算比例。
|
|
濾波設定值
filter(濾波) | 說明 |
---|---|
NEAREST | 預設濾波 ,從輸入的圖檔中選取最近的像素作為輸出像素。 |
BILINEAR | 雙線性內插濾波,再輸入圖像的 2*2 矩陣上進行線性插值。 |
BICUBIC | 雙立方濾波,再輸入圖像的 4*4 矩陣上進行立方插值。 |
ANTIALIAS | 平滑濾波,對所有可以影響輸出像素的輸入像素進行高質量的重採樣濾波,以計算輸出像素值。 |
圖像繪製工具 - turtle
|
|
數字模組 - math
|
|
亂數模組 - random
|
|
浮點數精度模組 - Decimal
|
|
抓DOS模式後方參數的模組 - sys
|
|
|
|
資料庫模組 - sqlite3
- 載入模組
|
|
- 連接資料庫 -
.connect()
資料庫連結
.connect(資料庫名稱
)
|
|
- Cursor指標指到資料庫(以便使用資料庫物件操作資料庫) -
.cursor()
資料庫物件
= 資料庫連結
.cursor()
|
|
- 執行SQL語法 -
.execute()
資料庫物件
.execute(SQL語法
)
|
|
- 提交當前的SQL事務(執行完SQL需使用此函式提交) -
.commit()
資料庫連結
.commit()
|
|
- 取得所有資料 -
.fetchall()
資料庫物件
.fetchall()
|
|
- 取得單筆資料 -
.fetchone()
資料庫物件
.fetchone()
|
|
正規表達式模組 - re
以小寫r
開頭再接字串,例如:r"\d"
、r"0-9"
規則寫法 | 說明 | 範例 |
---|---|---|
{} | 個數 | \d{4}-\d{6} :台灣電話號碼格式0000-000000為符合 |
{n,} | 至少出現n次 | X{2,} :X至少出現2次才符合 |
` | ` | 或 |
\d | 任意數字 | \d :0-9為符合 |
- | 到 | 1-5 :1 ~ 5為符合,a-z :a ~ z為符合 |
^ | 否定 | ^aeiou :非a ,e ,i ,o ,u 為符合 |
. | 字元 | . :字元皆符合,符號類(例如:\n )不符合 |
* | 重複前一個字元0~無限多次都符合 | err* :err、errr、errrr…等都為符合 |
? | 前一個字元可有可無皆符合 | colou?r :color、colour皆為符合 |
+ | 前一個字元要一次以上才符合 | er+ :er不符合,err、errr…等才符合 |
$ | 1.位數由後往前匹配 2.為結尾才匹配 | [1-9]\d$ :1 ~ 99皆為符合,100不符合 |
() | 1.僅收集括號內的內容 2.分組別以便.group(組別) 可以直接抓到值 | r'<h3 class="LC20lb DKV0Md">(.*?)</h3>' :僅回傳<h3>內的文字 |
\b | 邊界,為邊界則符合 | dog\b :‘dog ‘符合,‘dog’不符合 |
\數字 | 分組向前參考 |
- 貪婪/逐步量詞 (
*
/?
)
貪婪量詞 - *
:0次~無限次皆符合。
|
|
逐步量詞 - ?
:回傳最短的量詞。
|
|
- 載入模組
|
|
- 分割字串 - re.split(
正則
,分割的字串
)
|
|
- 取代字元 - re.sub(
正則
,欲取代的字元
,字串
)
|
|
- 匹配字元 - re.match(
欲匹配的文字
,字串
)
|
|
- 尋找字元(找第一個) - re.search(
欲尋找的文字
,字串
)
|
|
- 尋找字元(找所有) - re.findall(
欲尋找的文字
,字串
)
|
|
抓html模組 - requests
- 載入模組
|
|
GET
- 抓取檔案 -
.get(網址)
|
|
GET 可帶的參數(需使用關鍵字參數 ) | 說明 |
---|---|
headers | 請求的headers |
params | 參數 |
cookies | client的cookies |
- 抓取標頭(head) -
.head(網址)
|
|
- 狀態碼 -
status_code
|
|
- 編碼格式 -
encoding
|
|
- html內容 -
text
|
|
- response headers -
headers
|
|
- request headers -
request.headers
其中的User-Agent
相當重要,用來判斷使用者的相關資訊用,爬蟲與反爬蟲通常使用此參數。
|
|
- 抓圖片檔
開檔格式使用wb:二進位格式寫入
w:寫入 / b:二進位格式
|
|
- 帶request header的請求
先從一般瀏覽器取得header(user-agent)
需使用關鍵字參數
|
|
POST
POST 可帶的參數(需使用關鍵字參數 ) | 說明 |
---|---|
data | form data請求的data |
headers | 請求的headers |
cookies | client的cookies |
- POST存Session -
.Session()
|
|
解析&美化HTML模組 - BeautifulSoup4
- 載入模組
|
|
- BeautifulSoup4的基本元素表
基本元素 | 說明 |
---|---|
tag | 標籤:最基本的信息組織單位,分別用<> 和</> 標明開頭與結尾。 |
name | 標籤名稱:<p>...</p> 的名字是p ,格式:<tag>.name 。 |
Attributes | 屬性:<tag>.attrs ,dict型式。 |
NavigatString | 內容:<tag>.string 。 |
Comment | 註釋:標籤內字符串的註釋部分,一種特殊的Comment類型。 |
- 解析 - .BeautifulSoup(
html
, ‘html.parser’)
|
|
- 美化 - .prettify()
|
|
- 取得屬性 - .attrs
|
|
- 取得tag內容 - .string/.text
|
|
- 找第一個標籤 - .find("
標籤
")
|
|
- 找全部的標籤 - .find_all("
標籤
", class_="className
")
可加上class做篩選條件。
|
|
- 透過選擇器篩選標籤 - .select(
同CSS選擇器,Class或ID
)
若有空格會有問題,soup.select(."title p")
會報錯,空格需使用.find()
、.findAll()
|
|
json
模組
- 載入模組
|
|
- json轉dict - json.loads("
字串
")
|
|
- dict轉json string - json.dumps("
字典
")
|
|
csv
模組
- 載入模組
|
|
- 以
_csv.reader
型態讀取csv檔 - csv.reader(檔案
)
|
|
- 以
dict
型態讀取csv檔 - csv.DictReader(檔案
)
|
|
- 寫入csv檔 - csv.writer(
檔案變數
)
需先定義一個物件為csv.writer(),在進行寫入。
writerow()
:單行寫入
|
|
- 以字典型態寫入csv檔 - csv.DictWriter(
檔案變數
, fieldnames=欄位變數(列表型態)
)
|
|
模擬瀏覽器模組(自動化測試) - selenium
- 安裝 selenium 模組
Anaconda
編譯器的話,使用Anaconda Prompt
|
|
|
|
下載瀏覽器驅動(web driver)
先查看chrome瀏覽器的版本,Google:Web driver chrome
後下載。載入模組
|
|
- 實例化一個瀏覽器視窗(Chrome),並設定一個
瀏覽器物件
檔案名稱勿與selenium模組名稱相同以免衝突而無法執行
|
|
- 發送
GET
請求 -瀏覽器物件
.get(網址
)
|
|
- 根據dom元件的id/class定位 -
瀏覽器物件
.find_element_by_id(id
) 或瀏覽器物件
.find_element_by_class(class
)
|
|
- 送出表單 -
瀏覽器物件
.dom元件
.submit()
|
|
- 點擊事件 -
瀏覽器物件
.dom元件
.click()
|
|
- 取得頁面原始碼 - .page_source
|
|
- 螢幕截圖 -
瀏覽器物件
.save_screenshot(截圖的圖檔名稱
)
|
|
- 獲取cookies -
瀏覽器物件
.get_cookie()
|
|
- 關閉實例化的瀏覽器視窗 -
瀏覽器物件
.close() 或瀏覽器物件
.quit()
|
|
資料分析模組 - Pandas
- 載入模組
|
|
- 解析list類型 -
pandas物件
.Series(資料
)
|
|
- 解析Data類型 -
pandas物件
.DataFrame(字典型態的資料
)
|
|
可指定x軸或y軸欄位名稱(columns, index)
|
|
- 回傳最大值 -
Data資料
.max()
|
|
- 回傳最小值 -
資料
.min()
|
|
- 取得指定欄位 -
Data資料
.loc[x
][y
]
|
|
- 輸出成csv(或json)檔案 -
Data資料
.to_csv("檔名
", encoding="編碼
") 或Data資料
.to_json("檔名
", encoding="編碼
")
|
|
繪圖模組 - plot
- 載入模組
|
|
- 畫折線圖 - .plot(
X軸資料
,Y軸資料
)
|
|
- 顯示Label - .legend()
要顯示label需執行此function
:
為點線, --
為虛線, 不指定預設為實線
|
|
- 指定圖表標題 - .title()
|
|
- 指定X/Y軸標題 - .xlabel(
X軸標題
) / .ylabel(Y軸標題
)
|
|
- 畫長條圖 - .bar(
X軸資料
,Y軸資料
)
|
|
- 畫圓餅圖 - .pie(
資料
)
|
|
繪圖模組2 - plotly
- 安裝 plotly 模組
Anaconda
編譯器的話,需使用Anaconda Prompt
安裝。
使用Jupyter Notebook
編輯
|
|
- 載入模組(並指定繪圖模式)
|
|
- 在線繪圖需收費,需使用離線繪圖
|
|
- 指定X/Y軸資料
|
|
- 畫出折線圖
|
|
- 指定繪圖的mode
|
|
- 指定圖表標題(繪圖模式須
import Layout
)
|
|
Excel模組 - openpyxl
- 載入模組
|
|
- 建立工作簿物件 - openpyxl.Workbook()
|
|
- 取得指定工作表
|
|
- 鍵入值
方法一:行列插入
|
|
方法二:自動換行插入
|
|
- 取得特定欄位的值 - .value
|
|
- 存檔 -
工作簿物件
.save(檔名
)
|
|
- 取檔 - openpyxl.load_workbook(
檔名
)
|
|
- 取得總行數 -
工作表物件
.max_row
|
|
- 取得總列數 -
工作表物件
.max_column
|
|
- 到指定欄位 -
工作表物件
.cell(row=指定行數
, column=指定列數
)
|
|
Python 資料型態
資料型態說明
資料型態 | 說明 |
---|---|
str | 字串 |
int | 整數 |
bool | 布林值 |
float | 浮點數 |
None | 空值 |
list [] | 列表,同Array |
tuple () | 不可變更的Array |
dict {} | 字典,同Object |
set () | 集合,同Object,但key為索引值 |
Python 運算子
基本運算子
運算子 | 說明 |
---|---|
+ | 加:數值相加,字串相連接 |
- | 減 |
* | 乘:數值相乘,字串可乘數值(python獨有) |
/ | 浮點數除 |
** | 平方 |
**0.5 | 開根號 |
// | 整數除 |
% | 取餘數 |
指派運算子
運算子 | 說明 |
---|---|
+= | 原值等於原值加 |
-= | 原值等於原值減 |
*= | 原值等於原值乘 |
/= | 原值等於原值除 |
判斷運算子
運算子 | 說明 |
---|---|
> | 大於 |
< | 小於 |
== | 等於 |
!= | 不等於 |
>= | 大於等於 |
<= | 小於等於 |
邏輯運算子
運算子 | 說明 |
---|---|
and | 並且 |
or | 或者 |
not | 反向 |
Python 函式
回傳資料型態 - type()
|
|
輸入窗 - input()
|
|
字串轉數值 - eval()
|
|
特殊符號轉十進位編號 - ord() / chr()
|
|
取最大 / 最小值 - max() / min()
|
|
取絕對數值 - abs()
|
|
進制字串轉數字 - eval()
|
|
數字轉字串 - str()
|
|
字串轉數字或數字轉整數 - int()
|
|
浮點數字串轉數字 - float()
|
|
四捨五入 - round(數值
[,位數]
)
|
|
平方 - pow(數值
, 平方根
)
|
|
取得長度 - len()
任何資料型態都通用
|
|
編碼 / 解碼 - encode() / decode()
|
|
字串轉大小寫 - upper() / lower()
|
|
字串取代 - replace(舊字串
, 新字串
)
|
|
字串判斷的函式
函式 | 說明 |
---|---|
StrA.isalpha() | 是否為字母 |
StrA.isdigit() | 是否為數字 |
StrA.isupper() | 是否為大寫 |
StrA.islower() | 是否為小寫 |
StrA.isidentifer() | 是否為識別字 |
StrA.iskeyword() | 是否為關鍵字,需要keyword模組 |
StrA.isspace() | 是否為空白 |
StrA.istitle() | 是否為標題字(第一個字為大寫則是標題字) |
字串搜尋的函式
函式 | 說明 |
---|---|
Str.count(文字A) | 搜尋文字A 出現的次數 |
StrA.startswith(文字A) | 是否為文字A 開頭 |
StrA.endswith(文字A) | 是否為文字A 結尾 |
StrA.find(文字A) | 搜尋文字A 的位置 |
StrA.rfind(文字A) | 搜尋文字A 最後出現的位置 |
印出字串 - print()
|
|
字串格式化 - format()
取代字串中{}
|
|
可帶關鍵字取代
|
|
從最後面插入 - append()
|
|
從指定位置插入 - insert(位置
, 值
)
|
|
條件判斷
條件判斷式 - if… elif… else…
|
|
例外判斷 - try… except…
|
|
- except 錯誤分類
錯誤異常判斷 | 說明 |
---|---|
Exception | 只要有錯誤 |
NameError | 變數名稱錯誤 |
ValueError | value值錯誤 |
ZeroDivisionError | 除數/分母不可為零的錯誤 |
TypeError | 資料格式錯誤 |
迴圈
技術式迴圈 - for
|
|
條件式迴圈 - while
|
|
break:跳脫迴圈
|
|
continue:跳過繼續進行下一迴圈
|
|
自訂函式
自定義函式 - def
- 一般宣告函式
|
|
- 設定參數預設值
|
|
- 設定不定個數參數(參數為
tuple
型態)
帶入參數
帶星號可將帶入的參數組成一個tuple
|
|
實際參數
帶星號可將原為tuple
型態的資料拆解開來
|
|
- 多個回傳值
|
|
操作 List(列表)
建立
- 建立空list
|
|
- 建立list
|
|
- 從string建立list
|
|
- 從range建立list
|
|
- 從字串分割建立list
|
|
刪除
- 刪除整個list
|
|
- 刪除list中的某一個(以第一個為例)
|
|
- 清除list元素(等於
del list[::]
)
|
|
list新增元素
|
|
查詢索引
|
|
統計出現的次數
|
|
元素排序
|
|
元素倒序
|
|
操作 Dict(字典)
查詢
- 一般查詢
|
|
- 以key查詢,使用dict1.get(key, [default]) - (推薦)
|
|
- 查詢所有的key (回傳列表)
|
|
- 查詢所有的values (回傳列表)
|
|
建立
- 建立空dict
|
|
- 建立dict
|
|
- 新增dict
|
|
更新
- 更新dict
|
|
- 比對更新 - update
update 會比對沒有的key並補上,比對有的key進行value更新。
|
|
刪除
- 刪除整個dict
|
|
- 清空整個dict
|
|
- 刪除list中的某一個(以第一個為例)
|
|
操作 class (類別/物件導向)
封裝成一個類別 - class 類別名稱
:
python的class會自動執行__init__
函式,可自行定義__init__
內要做的事。
__init__
第一個參數預設為self
。
|
|
檔案處理
讀寫模式
模式 | 說明 |
---|---|
r | read :讀取(檔案需存在) |
w | write :新建檔案寫入(檔案可不存在,若存在則清空) |
a | append :資料附加到舊檔案後面(游標指在檔案結尾,檔案可不存在) |
r+ | 讀取舊資料並寫入(檔案需存在且游標指在開頭) |
w+ | 清空檔案內容,新寫入的東西可再讀出 |
a+ | 資料附加到舊檔案後面,可讀取資料 |
b | 二進位模式 |
記憶方式:
|
|
檔案開啟 - open()
- 操作後需關檔 -
close()
|
|
讀取 - read()
myfile.txt
|
|
test.py
|
|
執行回傳
|
|
寫入 - write()
test.py
|
|
myfile.txt
|
|
移動讀寫頭 - seek()
|
|
執行回傳
|
|
讀出行數 - readline() & readlines()
- readline:一行一行讀
- readlines:一次讀全部行數
poem.txt
|
|
read.py
|
|
執行回傳:
|
|
使用 with-open-as 做讀檔案的動作 - (推薦)
|
|
執行回傳:
|
|
刪除檔案 - remove()
- 使用
os
模組 - 使用
os.path.exists
判斷檔案是否存在
|
|
新增目錄 - mkdir()
- 使用
os.path.exists
判斷檔案是否存在
|
|
刪除空目錄 - rmdir()
- 使用
os.path.exists
判斷檔案是否存在 - 限定空目錄
|
|
刪除目錄與底下全部檔案 - rmtree()
- 使用shell utility模組 -
shutil
- 需謹慎使用避免刪錯目錄
|
|
Python 語法筆記
兩個變數交換值(Python Only)
|
|
開頭宣告編碼方式可直接強轉(Python Only)
|
|
Python函數帶入參數方式
- 參數以
tuple
傳入function。
|
|
- 參數以
tuple
拆解,進function在組合回tuple
。
|
|
- 參數以
dict
傳入function。
|
|
- 參數以
dict
拆解,進function在組合回dict
(需為參數指定關鍵字)(關鍵字參數)。
|
|
其他
字串運算(Python Only)
- in:是否含有
|
|
- not in:是否不含有
|
|
- 取字串的特定位置字元
格式:開始點
:結束點
:間隔
|
|
SQLite 關聯式資料庫(版本3.31.1)
系統命令(.
開頭),SQL命令(;
結尾)
系統命令
進入資料庫
指令:sqlite3 資料庫名稱
|
|
資料庫 (DB)
sqlite指令新增資料庫
|
|
sqlite指令查詢所有資料庫
|
|
資料表 (Table)
欄位設定 | 說明 |
---|---|
NM | (None)可否允許空值 |
PK | (Primary Key)是否為主鍵 |
AI | (A.I)是否自動產生值 |
U | (Unique)不重複鍵 |
新增資料表
|
|
sqlite指令查詢所有資料表
|
|
更新資料表
SQL語法:ALTER TABLE 資料庫
ADD COLUMN 欄位名稱
資料型態
|
|
資料操作 (CRUD:Create/Read/Update/Delete)
插入資料
SQL語法:INSERT INTO 資料表
VALUES(欄位1
, 欄位2
, 欄位3
)
|
|
查詢資料
SQL語法:SELECT 欄位
FROM 資料表
[WHERE 條件
];
|
|
刪除資料
SQL語法:DELETE FROM 資料表
[WHERE 條件
];
|
|
修改資料
SQL語法:UPDATE 資料表
SET 欄位名稱
= 值
[WHERE 條件
];
|
|