iT邦幫忙

2024 iThome 鐵人賽

DAY 24
1

Hi 大家好,

今天要開始介紹Python中的檔案處理篇,那我們開始吧!

open()函數

  • open() 函式是 Python 用來打開檔案的主要方式。它會返回一個file檔案物件,你可以使用這個物件來進行讀寫操作。

file 與 mode 參數

  • file:要打開的檔案路徑,可以是絕對路徑相對路徑
  • mode:定義檔案的開啟模式如下:
    • r : 讀取,以唯讀方式開啟檔案,文件的指針將會放在文件的開頭(預設模式)
    • w : 寫入,開啟檔案用來寫入,若檔案已存在,會先把內容刪除,會覆蓋原先所有內容
    • a : 附加,開啟檔案用來寫入,若檔案已存在,會從檔案最後面開始追加內容
    • x : 創建新檔案,開啟檔案用來寫入,若檔案已存在,會拋出例外FileExistsError通知
    • b : 二進位模式
    • t : 預設本文模式
    • r+ : 讀寫,開啟檔案用來讀寫,文件指針將會放在文件的開頭。
    • w+ : 同w,但同時也可以讀取
    • a+ : 同a,但同時也可讀取

舉的例子:

  • 使用open()函數,設定mode參數,回傳一個file物件
# 以讀取模式 ('r') 打開一個檔案
file = open('example.txt', 'r')

# 以寫入模式 ('w') 打開一個檔案
file = open('example.txt', 'w')

read()、write()、close()

  • read(size):從檔案中讀取 size 字元,若不指定 size,則讀取整個檔案
  • write(string):將字串寫入檔案
  • close():關閉檔案,釋放資源

讀取檔案內容並顯示

file = open('example.txt', 'r', encoding="utf-8")
content = file.read()
print(content)
file.close()
PS D:\Project\practice> python .\hi.py
Python(英國發音:/ˈpaɪθən/;美國發音:/ˈpaɪθɑːn/),是一種廣泛使用的直譯式、進階和通用的程式
語言。Python支援多種程式設計範式,包括結構化、程序式、反射式、物件導向和函數式程式設計。它擁有動態型別系統和垃圾回收功能,能夠自動管理主記憶體使用,並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及物件導向的方法,旨在幫助程式設計師為小型的和大型的專案編寫邏輯清晰的程式碼。
PS D:\Project\practice>

寫入內容到檔案

file = open('example.txt', 'w', encoding="utf-8")
file.write("Hello, World!")
file.close()
# example.txt 內容被更換成以下內容
Hello, World!

readline()、readlines()、writelines()

  • readline():每次讀取一行,直到檔案結束或指定行結束符號。
  • readlines():將檔案的每一行作為列表元素讀取。
  • writelines(lines):將一個列表中的多行內容寫入檔案。

逐行讀取檔案

file = open('example.txt', 'r', encoding="utf-8")
line = file.readline()
while line:
    print(line, end='')  # 使用 end='' 來避免多餘的換行
    line = file.readline()
file.close()
PS D:\Project\practice> python .\hi.py
Python(英國發音:/ˈpaɪθən/;美國發音:/ˈpaɪθɑːn/),是一種廣泛使用的直譯式、進階和通用的程式語言。Python支援多種程式設計範式,包括結構化、程序式、反射式、物件導向和函數式程式設計。它擁有動態型別系統和 垃圾回收功能,能夠自動管理主記憶體使用,並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及物件導 向的方法,旨在幫助程式設計師為小型的和大型的專案編寫邏輯清晰的程式碼。
PS D:\Project\practice> 

將多行寫入檔案

lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
file = open('example.txt', 'w')
file.writelines(lines)
file.close()
Line 1
Line 2
Line 3

tell()、seek()、flush()

  • tell():返回檔案當前的位置(以字節為單位)。
  • seek(offset, whence):
    • 將檔案指標移動到指定位置。
    • offset 是相對於 whence 的偏移量,
    • whence 可以是 0(檔案頭)、1(當前位置)或 2(檔案尾)。
  • flush():將檔案的緩衝區內容寫入磁碟,避免丟失數據。

檢查並移動檔案指標

file = open('example.txt', 'r+')
file.write("Hello, World!")
print(file.tell())  # 輸出當前檔案指標位置
file.seek(0)  # 移動指標到檔案開頭
print(file.read())  # 讀取檔案內容
file.close()
PS D:\Project\practice> python .\hi.py
13
Hello, World!igh-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.[32]
PS D:\Project\practice>

寫入後立即刷新緩衝區

file = open('example.txt', 'w')
file.write("Some content")
file.flush()
file.close()
# example.txt 內容被更換成以下內容
Some content

readinto()

  • readinto(buffer):將檔案內容讀入緩衝區。buffer 必須是已初始化的字節數組或類似的可變對象。

將檔案內容讀入字節數組

file = open('example.txt', 'rb')  # 以二進位模式打開
buffer = bytearray(20)  # 創建一個大小為 20 的字節數組
file.readinto(buffer)  # 將數據讀入緩衝區
print(buffer)
file.close()
PS D:\Project\v> python .\hi.py
bytearray(b'Hello, World!igh-lev')
PS D:\Project\practice>

那今天就介紹到這裡,我們明天見~


上一篇
【Day 23】錯誤和例外狀況篇 - 續集
下一篇
【Day 25】檔案處理篇 - 續集
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言