指導教師:李菊權(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 條件];
| |
