I/O = Input/Output
Directory 目錄
其實就是資料夾,不過稍微廣義一點,像是我們很少把根目錄叫做資料夾
Flie 檔案
檔案大致上可以分兩種,文字檔 (text file) 跟二進位檔 (binary file)
文字檔你可以用編輯器直接開起來,你可以看懂他,像是 txt, html…
二進位檔必須藉由解碼器才能開,用文字編輯器硬開你也看不懂,像 zip, png, docx…
Filename Extension 副檔名
副檔名是作業系統用來標示檔案格式的一種機制,檔名中最後一個句點後即為該檔案的副檔名
副檔名重要的作用是讓系統決定當使用者想打開這個檔案的時候用哪種軟體執行
Path 路徑
檔案的位置稱為路徑,又可以分為相對路徑跟絕對路徑
絕對路徑是以根目錄為基準的完整路徑,不會因工作目錄不同而產生變化
相對路徑以當前工作目錄為基準,使檔案引入時能在已知範圍搜尋,整個專案資料移動時比較不需要更改路徑
參考:各作業系統與shell中路徑的表示法
通常 .
代表當前目錄, ..
代表上一層目錄,目錄跟目錄或是目錄跟檔案間用 /
分隔
檔案開了讀寫完一定要關
檔案開了讀寫完一定要關
檔案開了讀寫完一定要關
file_object: 檔案物件
跟一般的物件(變數)一樣,可以自己取名子
如果把 f
輸出會得到類似輸出class的物件資訊
file: 檔案路徑
相對或絕對路徑都可以,以字串方式輸入,要包含副檔名
如果直接打檔案(如範例)則視為從工作目錄下尋找
mode: 開檔模式
跟 Python 講你要拿這個檔案做什麼,預設是 'r'
('rt'
)
字符 | 含意 |
---|---|
r | 讀取(默認) |
w | 寫入,並先截斷文件 |
x | 排他性創建(如文件已存在則失敗) |
a | 打開文件用於寫入(如文件已存在則在最後追加) |
b | 二進制模式 |
t | 文本模式(默認) |
+ | 打開用於更新(讀取與寫入) |
'r+'
、'r+b'
會打開檔案用於讀寫並不清空內容
'w+'
、'w+b'
會打開檔案用於讀寫但清空內容
其他 open 的參數
參見:官方文檔
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
其中比較會用到的還有 encoding
跟 newline
讀檔主要有兩個方法
讀一整列
讀特定數量字元
如果 read()
不給長度,則會一次讀進整份檔案
很重要
不關檔的壞處
關檔前都不會寫入,如果想馬上寫入檔案怎麼辦
檔案只有在 with
的區塊裡才是開的,所以不用關檔
上面的程式碼等同下面這種寫法
:arrow_up: 遍歷所有列
這樣就可以直接用 print
寫入了,也可以加 flush=True
更新文件
pickle
阿,不是這個
pickle 官方文件
pickle 是 Python 專用,用來直接存物件的東西
又因為 Python 幾乎所有東西都是以物件實作的,所以幾乎所有東西都能用 pickle 存成一個二進位檔
pickle 的設計就是要快速的存取 Python 的物件,包含除了一般常見的變數也包含函數、類別等
但由於 pickle 保留完整的 Python 物件,官方文件也提到了 pickle 的危險性,如果存取未完全信任的 pickle 可能會使其入侵你原本的程式
JSON (JavaScript Object Notation) 是一種人看得懂的存資料方法
JSON 官方
Python 官方文件
JSON 常常是不同程式之間交換資料的格式,JSON 的官方文件下面也列了一些
神奇我在成大資工特選複試的時候沒學好 C++ 的 JSON 輸出就下去了
這裡是一份 JSON 的範例,其實可以看成 Python 的 list 跟 dict 的組合
可以按這裡下載
json.load
:從檔案讀 jsonjson.loads
:從字串讀 jsonjson.dump
:把 dict 或 list 換成 string 然後寫進檔案json.dumps
:把 dict 或 list 換成 string