iT邦幫忙

0

[Day2]打造命令列待辦清單工具

  • 分享至 

  • xImage
  •  

今天要做什麼

昨天我先分享了為什麼要用Python寫30天的小實作。
今天,我們要動手完成第一個實用工具:
命令列待辦清單(CLI To-Do List)

這個小工具可以讓我們直接在電腦終端機裡:
新增待辦事項
查看所有待辦事項
標記完成的任務

用到的工具
argparse:處理命令列參數
json:存取本地 JSON 檔案,當作小型資料庫
datetime:記錄新增任務的時間

程式碼實作
建立一個檔案:todo.py

import argparse, json, os, datetime as dt

DB = "todo.json"

def load_db():
    if not os.path.exists(DB):
        return []
    with open(DB, "r", encoding="utf-8") as f:
        return json.load(f)

def save_db(rows):
    with open(DB, "w", encoding="utf-8") as f:
        json.dump(rows, f, ensure_ascii=False, indent=2)

def add_task(text):
    rows = load_db()
    rows.append({
        "id": len(rows) + 1,
        "text": text,
        "done": False,
        "ts": dt.datetime.now().isoformat()
    })
    save_db(rows)
    print("✅ 已加入:", text)

def list_tasks():
    rows = load_db()
    if not rows:
        print("目前沒有待辦事項")
        return
    for r in rows:
        flag = "✔" if r["done"] else "•"
        print(f'{flag} [{r["id"]}] {r["text"]}')

def done_task(i):
    rows = load_db()
    for r in rows:
        if r["id"] == i:
            r["done"] = True
    save_db(rows)
    print(f"✅ 完成編號 {i}")

if __name__ == "__main__":
    p = argparse.ArgumentParser(description="簡易待辦清單 CLI")
    sub = p.add_subparsers(dest="cmd", required=True)

    pa = sub.add_parser("add"); pa.add_argument("text")
    sub.add_parser("list")
    pd = sub.add_parser("done"); pd.add_argument("id", type=int)

    a = p.parse_args()
    if a.cmd == "add":
        add_task(a.text)
    elif a.cmd == "list":
        list_tasks()
    elif a.cmd == "done":
        done_task(a.id)

執行範例
新增待辦
python todo.py add "買牛奶" python todo.py add "寫鐵人賽文章"
查看清單

python todo.py list

輸出:
[1] 買牛奶
[2] 寫鐵人賽文章
完成一項

python todo.py done 1

輸出:
完成編號 1
再查看清單:
[1] 買牛奶
[2] 寫鐵人賽文章

實作:
https://ithelp.ithome.com.tw/upload/images/20250923/201693681JZYj3ToRg.png
今日心得
JSON 檔就能當作小型資料庫,非常輕便。
argparse 讓 CLI 工具寫起來結構清楚。
這個小工具雖然簡單,但已經能實際應用在生活裡了。

明天我們會做一個 自動整理檔案的工具,能把資料夾裡的檔案依日期或副檔名分類存好。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
makatie391
iT邦新手 5 級 ‧ 2025-09-23 17:42:15

哇這個 CLI To-Do List 超實用!
我平常也是用 JSON 當小型資料庫,真的輕便到不行,還不用另外架 DB。
看到你用 argparse 管理參數,我才想到之前寫自動整理檔案的小腳本,光是 sys.argv 就讓我 debug 半天 😂 argparse 果然優雅很多。

期待你明天的自動整理檔案工具!這功能我真的需要,因為我的 Download 資料夾已經亂到爆炸了 🙈

我要留言

立即登入留言