Try   HackMD

取自《初學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 存檔(輸入要存的檔名)
  1. 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)