Python open() 函數完整指南

更新日期: 2025 年 2 月 9 日

在 Python 中,處理文件是常見的操作,例如讀取日誌、寫入數據或修改設定檔。

open() 函數正是 Python 提供的內建方法,用來開啟文件並進行讀寫操作。

本篇文章將詳細介紹 open() 函數的用法,包括其語法、不同模式、錯誤處理方式,並補充 withas 關鍵字的使用,讓你更安全、高效地操作文件。


open() 函數的基本介紹

語法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中:

  • file必填,表示要開啟的文件名稱(可以是相對或絕對路徑)。
  • mode:文件開啟模式,預設為 'r'(只讀)。
  • buffering:緩衝區設定,0 為無緩衝,1 為行緩衝,-1>1 為系統預設緩衝大小。
  • encoding:字符編碼,讀取文本文件時常用 'utf-8'
  • errors:錯誤處理方式,如 'ignore'(忽略錯誤)或 'replace'(用替代字符)。
  • newline:控制換行字符的處理方式,適用於文本模式。
  • closefd:是否在關閉 open() 時一併關閉文件描述符,適用於開啟文件描述符時。
  • opener:自定義文件打開函數,較少用到。

文件模式 (mode)

不同的 mode 影響文件的讀寫方式,以下是常見的模式:

模式描述
'r'以只讀模式開啟(默認),文件不存在則報錯
'w'以寫入模式開啟,若文件存在則清空內容,否則新建
'a'以追加模式開啟,寫入內容會添加到文件末尾
'x'以獨占創建模式開啟,文件存在時會報錯
'b'二進制模式,可與其他模式搭配(如 'rb')
't'文本模式,可與其他模式搭配(如 'rt',默認)
'+'讀寫模式,可與 'r'、'w'、'a' 搭配(如 'r+')

例如:

# 以只讀模式打開文件
file = open("example.txt", "r")

# 以寫入模式打開(會清空原內容)
file = open("example.txt", "w")

# 以追加模式打開(不清空原內容)
file = open("example.txt", "a")

讀取文件內容

Python 提供多種方法來讀取文件內容:

read() 讀取整個文件

file = open("example.txt", "r", encoding="utf-8")
content = file.read()
print(content)
file.close()

readline() 讀取單行

file = open("example.txt", "r", encoding="utf-8")
line = file.readline()
print(line)
file.close()

readlines() 讀取所有行並以列表返回

file = open("example.txt", "r", encoding="utf-8")
lines = file.readlines()
print(lines)
file.close()

寫入文件

Python 也提供不同方法來寫入內容:

write() 寫入字符串

file = open("example.txt", "w", encoding="utf-8")
file.write("Hello, Python!\n")
file.close()

writelines() 寫入多行

lines = ["第一行\n", "第二行\n", "第三行\n"]
file = open("example.txt", "w", encoding="utf-8")
file.writelines(lines)
file.close()

使用 withas 關鍵字

with 的優勢

在使用 open() 時,若忘記 close() 可能會導致內存洩漏或文件鎖定。

with 關鍵字可以確保文件在執行完後自動關閉,即便發生錯誤也不影響。

withopen() 搭配使用

with open("example.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)  # 文件會在 with 結束後自動關閉

相當於手動 close() 的寫法:

file = open("example.txt", "r", encoding="utf-8")
try:
    content = file.read()
    print(content)
finally:
    file.close()

as 關鍵字的作用

with open(...) as file: 這種寫法中,as 關鍵字用來給 open() 返回的文件對象起一個變數名,以便後續操作該對象。

with open("example.txt", "w", encoding="utf-8") as f:
    f.write("這是一條新數據!")

這裡的 as f 代表:

  • open("example.txt", "w", encoding="utf-8") 返回的文件對象被賦值給 f
  • 之後可以使用 f.write() 來對該文件進行操作。

換句話說,as 只是提供了一個簡潔的變數名稱,讓我們可以更方便地引用文件對象。

這種寫法的優勢是:

自動管理資源(避免忘記關閉文件)
代碼更簡潔、可讀性更強
防止異常導致文件未正確關閉


錯誤處理

開啟文件時,可能會遇到文件不存在或無法訪問的錯誤,可以使用 try-except 來處理:

try:
    with open("not_exist.txt", "r", encoding="utf-8") as file:
        content = file.read()
except FileNotFoundError:
    print("文件不存在!")
except PermissionError:
    print("沒有權限讀取該文件!")
except Exception as e:
    print(f"發生錯誤:{e}")

小結

  • open() 是 Python 內建的文件操作函數,可用來讀取或寫入文件。
  • mode 參數控制文件的讀寫方式(如 'r''w''a' 等)。
  • with 關鍵字確保文件能夠自動關閉,避免手動 close() 的風險。
  • as 關鍵字用來為 open() 返回的文件對象取別名,讓代碼更簡潔。
  • 可以使用 try-except 來處理文件相關的錯誤,確保代碼更健壯。

希望這篇指南能幫助你掌握 Python 的文件操作,提高開發效率!

Similar Posts