NKUST ITC 108-1 Python[1]
2019/10/15
tags: NKUST ITC
Python 社課
(應該是)今天的進度
複習Dict與List
json
檔案讀寫
基本的import用法
List
| a_list = ["這是一個List", "你說你知道?", "好吧"] |
| print(a_list[2]) |
Dict
| club_name = { |
| "資研社": "ITC", |
| "滔滔社": "TAO", |
| "學生會": "SA" |
| } |
| print(club_name["資研社"]) |
內容可以是任何物件?
- 所以Dict裡面可以放List?
- 那List裡面可以放D…
Dict裡面包含List
| a_dict = { |
| "程式語言": ["C", "C++", "Python", "Go", "Rust"], |
| "水果": ["西瓜", "蘋果"] |
| } |
怎麼取得內容呢?
以此類推,List裡面包含Dict…
| movie_list = [ |
| { |
| "片名": "Joker", |
| "上映日期": "10/3" |
| }, |
| { |
| "片名": "返校", |
| "上映日期": "9/20" |
| } |
| ] |
| print(movie_list[0]["上映日期"]) |
再更多層一點呢
| movie_list = [ |
| { |
| "片名": ["Joker", "小丑"], |
| "上映日期": "10/3" |
| }, |
| { |
| "片名": "返校", |
| "上映日期": "9/20" |
| } |
| ] |
| print(movie_list[0]["片名"][1]) |
結構上和Dict、List可以無痛轉換
無痛轉換的前提是,
內容的所有物件都是標準資料格式
(字串、數值或布林等等)
Serialize(序列化)
- 把資料轉成可取用的格式,這邊指將Dict、List等資料轉為json格式
- 方便資料的交換
Deserialize(反序列化)
- 將序列化後的資料(json)轉換回Dict、List
json in Python
- json.dumps(object)
- json.loads(string)
- json.dump(fp)
- 將Python物件轉為json格式字串,並存到fp指定的檔案
- json.load(fp)
- 從fp指定的檔案讀取json格式字串,並轉為Python物件
為何要讀寫檔?
儲存在變數的資料只是暫時放在記憶體中,
想要在程式結束後還保有資料就必須儲存為檔案
1. 基本操作
| f = open(filename, mode) |
| f.close() |
一個open()搭配一個close()使用,
有開有關養成好習慣
讀寫檔案的模式有以下幾種

r、w、a的意義
- r: read
- w: write
- a: append
- 後綴b: 以二進制讀取檔案
有沒有更好的方法可以讀寫完檔案後
順便關檔呢
| with open(filename, mode) as f: |
| print(f.read()) |
- 其中的f變數只在with這個區塊(block)中有效
4. readlines()以Column(列)為單位儲存在List裡面
Why import
- 今天我要造一部車
我要從輪子開始造起
- 有人是專門生產輪子,我跟他進貨
| from factory import wheel |
| |
- 另外一個原因是
為了方便維護程式碼,有時需要將功能分開寫。
在Python中,將常用的函式或方法包成Package(套件)或Module(模組)是相當常見的作法。
import module_name
| import json |
| data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] |
| json_string = json.dumps(data) |
| print(json_string) |
| import json as js |
| data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] |
| json_string = js.dumps(data) |
| print(json_string) |
import的用法相當自由(?
| from package_name import module_name |
| from package_name.module_name import function_name |
Package? Module? Function?
- 原則上,Package一般指目錄
- Module則是指檔案
- Function下下次社課會教到,
基本上和數學的函式是同一個概念
也可以import同目錄的module喔

| |
| import just_a_module |
| |
| just_a_module.intro() |
小陷阱
| from random import randint |
| num = random.randint(1,5) |
| |
| seed = random.seed() |
解決方法
| from random import randint,seed |
| num = random.randint(1,5) |
| seed = random.seed() |
| |
懶人用法
| from random import * |
| num = random.randint(1,5) |
| seed = random.seed() |
| status = random.getstate() |
| |
舉些例子
- 各大聊天軟體的BOT
- TG BOT、Line BOT、Discord BOT
- 股價分析
搶票小幫手
- 需要一直重複的事情
NKUST ITC 108-1 Python[1] https://python-slide.macs1207.dev 2019/10/15 tags: NKUST ITC Python 社課
{"metaMigratedAt":"2023-06-15T00:44:20.048Z","metaMigratedFrom":"Content","title":"NKUST ITC 108-1 Python[1]","breaks":true,"contributors":"[{\"id\":\"0543727d-0e35-443a-a198-84223cf6d534\",\"add\":5706,\"del\":1959},{\"id\":\"478dc5a5-55d6-4469-91c3-56c4ab9c7543\",\"add\":2320,\"del\":429},{\"id\":\"8a9f2da6-22f2-4329-8d35-37824be8c99d\",\"add\":2747,\"del\":1845}]"}