`取自《初學Python的第一本書 從基本語法到模組應用》` 系統模組(os) (Operating System 作業系統): 提供所使用的作業系統一些功能,EX:檔案的路徑檢查、列出檔案列表、檔案複製/移動/改名/刪除等 ⚠️ 使用 os 要先 import 看某個檔案或目錄是否存在於特定位置,可使用os.path.exists() * 相對路徑:從現在的資料夾為基準出發,前面會有一個 ./ 或 . 開頭 (一個點代表現在所在位置;兩個點代表上一層) * 絕對路徑:從Unix的根目錄或Windows的C槽D槽之類的起始點出發 (多加一個 \ 將可能造成的轉義去除) ``` os.path.isfile() / os.path.isdir():檢查這個路徑是否是檔案 / 資料夾的方法 os.path.join():處理路徑和檔案的結合 shutil.copy() / shutil.move():複製和移動檔案(參數前面寫來源,後面寫目的地) os.rename():修改名字,也可作為移動檔案用 os.mkdir() / os.rmdir():新增 / 刪除**資料夾** os.remove():刪除**檔案** os.listdir:列出資料夾的所有檔案及資料夾(只會列出第一層) os.walk():將整個資料夾,連同子資料夾都走過一遍,走完後所有內容會以 (dirpath, dirnames, filenames)的形式回傳, 可使用for...in...取得 ⚠️ 必須要給一個起始點('.') ``` ⚠️ 如果想要刪除某個目錄以下的所有檔案及資料夾,要特別注意top起始點是「/」(根目錄),而非「./」(當前目錄),否則整個檔案系統都會砍光 --- 日期與時間的相關模組:datetime跟time **datetime模組:** * date物件用法 ``` from datetime import date doubleten = date(年, 月, 日) print(doubleten.year, doubleten.month, doubleten.day) ``` * isoformat() / str():可將日期轉成用「 - 」連接的字串 ``` print(doubleten.isoformat(), str(doubleten)) ``` * date.today():取到系統時間的今天 ``` today = date.today() # isoformat格式會補0 ``` * weekday():0~6,0是星期一,6是星期日 * isoweekday():1~7,1是星期一,7是星期日 ``` today.weekday(), today.isoweekday() ``` * strftime():用來格式化想要的顯示樣態和目標 ``` print(today.strftime('%Y--%m--%d, WeekDay: %a')) ``` ⚠️ %Y 年;%m 月;%d 日;%a 星期幾的縮寫;%H 小時;%M 分;%S 秒 * time物件用法: ``` from datetime import time print(time()) # 00:00:00 # datetime的time.time()預設是從0開始 now = time() print(now.isoformat()) # 00:00:00 now = time(0,0,0,38) # 最小單位到微秒(百萬分之一秒,也就是10e-6) print(now.microsecond) # 取微秒 38 now = time(hour=19, second=50) print(str(now)) # 19:00:50 print(now.strftime('%H-%M')) # 19-00 ``` * datetime.datetime():全都要 ``` from datetime import datetime print(datetime.today()) # 現在的時間,計到微秒 print(datetime.utcnow()) # UTC標準時間 ``` * str()轉換:使用空格 * isoformat():使用「 T 」來分隔 ``` print(str(datetime.now)) # 2024-07-31 13:12:55.223883 print(datetime.now().isoformat()) # 2024-07-31T13:13:50.514944 ``` * timedelta():時間差 ``` from datetime import date, datetime, time, timedelta valentine = date(2023, 11, 28) today = date.today() romanticlen = today - valentine # 交往時間 print(romanticlen) # 246 days, 0:00:00 remember = [100, 200, 520, 1000, 2000] # 要記得的幾個紀念日 memorialday = [valentine + timedelta(days=i) for i in remember] print(memorialday) # [datetime.date(2024, 3, 7), datetime.date(2024, 6, 15), # datetime.date(2025, 5, 1), datetime.date(2026, 8, 24), # datetime.date(2029, 5, 20)] diff = [i - today for i in memorialday] print(diff) # [datetime.timedelta(days=-146), # datetime.timedelta(days=-46), datetime.timedelta(days=274), # datetime.timedelta(days=754), datetime.timedelta(days=1754)] ``` ⚠️ 也可用乘上數字來和定點日期相加減計算 **time模組:** * time.time():給出Unix標準時間 * localtime():現在所在時區的時間 ``` import time print(time.time()) # 1722410073.638067 print(time.localtime()) # time.struct_time(tm_year=2024, tm_mon=7, tm_mday=31, tm_hour=15, # tm_min=16, tm_sec=35, tm_wday=2, tm_yday=213, tm_isdst=0) ``` * struct_time():給定一個時間方便處理 * time.ctime() / time.strftime():將其轉換成易讀的字串 ``` now = time.localtime() print(time.ctime()) # Wed Jul 31 15:59:56 2024 print(time.strftime('現在是%A, %Y年%m月%d日的%H時%M分%S秒', now)) # 現在是Wednesday, 2024年07月31日的16時05分09秒 ``` * time.sleep():讓程式暫時停止執行指定的秒數,待時間到才繼續運作 ``` import os, time start = time.time() for path, dirs, files in os.walk('.'): print(path) for f in files: print(os.path.join(path, f)) for d in dirs: print(os.path.join(path, d)) time.sleep(10) end = time.time() print("總耗時:%f" % (end - start)) ``` --- python -m :可以呼叫一些標準函式庫的方法並輸入一些參數 * timeit.timeit(stmt, setup, timer, number) | 參數 | 意義 | | ------ |:----------------------------------------------:| | stmt | 被量測的程式碼 | | setup | 開始前可能有一些前置的設定要做的話,就放在這裡 | | timer | 請忽視,這是預設的timer | | number | stmt執行的次數 | ⚠️ stmt 也可直接傳入函數名稱,後面就不用加括號,因為是當成一個**函數物件** ``` import timeit timeit.timeit("'-'.join(str(n) for n in range(100))") ``` ⚠️ 預設是一百萬次 ``` timeit.timeit(stmt='x=3;y=5;res=x*y') ``` ⚠️ 如需多行,要使用分號分隔不同行 ``` timeit.repeat(stmt='x=3;y=5;res=x*y', number=10000, repeat=7) ``` ⚠️ 想重複timeit的測量,可使用timeit.repeat() --- 1. PIL (Python Imaging Library):是一套影像處理的模組,可以做到一些常見的影像處理和操作,比如裁切、平移、旋轉、縮放,調整亮度、色調,套用濾鏡等。 Image.open():可讀入一個圖檔 format、size、mode 則分別可以檢視圖檔格式、大小(寬跟高)以及色彩模式 * 順時針旋轉 rotate * 裁切 crop:必須使用Tuple傳入,4個數分別代表左上(x1, y1) / 右下(x2, y2) * 調整大小 resize:需要以Tuple表示 | 屬性 / 方法 | 用途 | | ----------- |:---------------------------------------------------- | | format | 顯示圖檔格式 | | size | 顯示大小(寬跟高) | | mode | 顯示色彩模式 | | show | 顯示圖片 | | rotate | 將圖片順時針旋轉 | | crop | 將圖片裁切成指定大小(輸入左上角和右下角的座標) | | paste | 將一個圖片貼到另一個圖片上面(輸入要貼上的圖片和位置 | | save | 存檔(輸入要存的檔名) | 2. ImageDraw:繪圖模組,用來處理繪製各種常見圖形以及文字的方法 ⚠️ 若要用空白畫布來繪製,可以用Image.new("RGB", (400, 300))的形式建立 --- * GUI (Graphical User Interface) 介面:有圖形化的互動介面,最常見的有 Tkinter / PyQT / WxPython / Kivy * Frame 區塊:用來切分視窗以便進行排版 * Button 按鈕:運用textvariable的參數來給定tk.StringVar變數,可以用來動態調整按鈕上的字的變化 ⚠️ tk的變數有StringVar, IntVar, DoubleVar等三種,set()用以設定變數,get()用以取得變數內容 * 單純想要**顯示文字**,不想被使用者修改,要使用**文字標籤(Label)** * 想要**被輸入的文字方塊**的話,使用**文字輸入欄(Entry)** * 想要使用**單選的選項**的話,使用**單選按鈕(Radiobutton)** * 想要**跳出提示方塊**的話,要使用**對話框(Messagebox)**