📖
Python Learning
  • 作者簡介
  • 為什麼要學程式
  • 😄新手村
    • 0. 新手村任務
    • 1. 輸出
    • 2. 變數與輸入
    • 3. 邏輯條件判斷
    • 4. 迴圈
    • 5. 陣列 (字串、串列、元組)
    • 6. 字典
    • 7. 集合
    • 8. 函式與遞迴
    • 9. 模組與套件
    • 10. 檔案讀寫
  • 🧐資料結構
    • 樹
    • 圖
  • 🤩演算法挑戰區
  • 樹與圖的應用
Powered by GitBook
On this page
  • I. 讀檔
  • A.開檔模式
  • B.開檔後讀取檔案內容
  • II.寫檔
  • A. 開檔後寫入檔案內容
  • B. 開檔後先寫入再讀取檔案內容

Was this helpful?

  1. 新手村

10. 檔案讀寫

Previous9. 模組與套件Next樹

Last updated 2 years ago

Was this helpful?

I. 讀檔

通常有兩種方式: 方法一:

f = open(<檔名>) # 讀檔一般習慣將它存在名稱為f的變數裡

不過使用完畢後要記得關閉它

f.close()

方法二: 【此方式使用完畢後會自動關閉檔案,因此較推薦】

with open(<檔名>) as f:

【比較看看】

假設你現在正在編輯的檔案名稱為main.py請你在同個目錄下創造出另一個.py(如圖中的moduleA.py)檔並嘗試用程式open它

方法一:

f = open("moduleA.py")
print(f.closed) # False (還未關閉)
f.close()

方法二:

with open("moduleA.py") as f:
    print(f.closed) # False (還未關閉)
print(f.closed) # True (已關閉)

A.開檔模式

開啟檔案時需指名開檔模式,根據開啟的模式,只能使用限定的功能 寫法:【open(<檔名>, <模式>)】

模式
功能
若存在此檔名
寫入方式
若不存在此檔名

r

讀取

讀取

Error

r+

寫入+讀取

讀取

從第一列開始覆蓋 (並沒有整個檔案覆蓋)

Error

w

寫入

整個檔案覆蓋

整個檔案覆蓋

開新檔案

w+

寫入+讀取

整個檔案覆蓋

整個檔案覆蓋

開新檔案

a

寫入

讀取

接續

開新檔案

a+

寫入+讀取

讀取

接續

開新檔案

B.開檔後讀取檔案內容

with open("moduleA.py", "r") as f:
    s = f.read() 
    print(s)

II.寫檔

A. 開檔後寫入檔案內容

【試試看看】

下列三種方法的結果有何不同?

# 請先自行新增file_r.txt空檔
for k in range(3):
    with open('file_r.txt', 'r+') as f:
        f.write(f'this is line {k}\n')
# 請先自行新增file_w.txt空檔
for k in range(3):
    with open('file_w.txt', 'w+') as f:
        f.write(f'this is line {k}\n')
# 請先自行新增file_a.txt空檔
for k in range(3):
    with open('file_a.txt', 'a+') as f:
        f.write(f'this is line {k}\n')

B. 開檔後先寫入再讀取檔案內容

【試試看看】

下列三種個.txt檔都請先事先設為:

line: 70
line: 80 
line: 90 
line: 20
line: 10
line: 00

再開始測試下列三種讀寫檔案方式:

with open('file_r.txt', 'r+') as f:
    for k in range(3):
        f.write(f'line: {k} \n')
    f.seek(0) # 回到檔案第一列第一行
    print(f.read())
with open('file_w.txt', 'w+') as f:
    for k in range(3):
        f.write(f'line: {k} \n')
    f.seek(0) # 回到檔案第一列第一行
    print(f.read())
with open('file_a.txt', 'a+') as f:
    for k in range(3):
        f.write(f'line: {k} \n')
    f.seek(0) # 回到檔案第一列第一行
    print(f.read())
😄