Last Updated on 2021-04-07 by Clay
今天想要向大家介紹的是 Python 裡頭 os 模組的使用以及檔案讀寫的方法。
尤其是在做 NLP (自然語言處理)相關的研究,檔案讀寫等等更是絕對要學會的技能。
那麼,今天我便簡單地介紹一下常用到的 os 模組,以及該怎麼使用 Python 進行簡單的檔案讀寫吧!
os 模組
要使用這個方便的模組,首先我們必須 import 進這個 Python 內建的套件。
import os
然後我將介紹最基本、也最常用的『如何創造資料夾』、『如何刪除資料夾』、『如何獲取資料夾底下的檔案名稱』。
os.mkdir('./os_practice')
首先,我們透過這個指令,在當前 script 的目錄底下創建了 os_practice 資料夾。
那麼,若我們想刪除這個資料夾(或特定的其他資料夾),那麼我們只需要下一個簡單的指令:
os.rmdir('./os_practice')
這樣就可以刪除我們所輸入的資料夾了!是不是很簡單呢?
但我們先不要做這個『刪除資料夾』的動作,以下,再紀錄一個簡單地查詢資料夾的方法。
假設我們在創造的資料夾底下放入了三個檔案(這裡我真的放進去了)。分別是 text01.txt, text02.txt, text03.txt。
print(os.listdir('./os_practice/'))
Output:
['text01.txt', 'text02.txt', 'text03.txt']
使用 listdir()
指令便會印出來了!
os 這個模組底下的操作還有很多種,要使用 Python 撰寫自動化腳本可說是必不可少的。大家可以根據自己的需求去查詢一下相關的用法,今天我只是盡量撿簡單的來講。
檔案讀寫
檔案的讀寫基本上大同小異,差別在於我們 open 檔案的時候採用什麼樣的模式。
基本上常用的便是『r』,『w』,『a』這三種模式。
r 是讀取這個檔案,可配合 read() 使用。
w 是寫入這個檔案,可配合 write() 使用。
a 是『續寫』這個檔案,可以在使用 write() 寫入檔案後,不影響這個檔案原本所含有的內容,而是繼續往下新增。
首先進行一下簡單的示範:剛剛我在 os_practice 底下放入了三份文本,三份文本裡頭各自含有不同的內容,現在我們就通過讀取分別印出三份文本的文字。
import os text_list = os.listdir('./os_practice/') for text in text_list: if text.endswith('.txt'): print('%s:' % text, open('os_practice/%s' % text, 'r', encoding='utf-8').read())
Output:
text01.txt: 今天天氣真好!
text02.txt: 今天天氣真差!
text03.txt: 欸欸聽說有颱風欸!
首先,一開始 import 進 os 的部份。緊接著,我們將剛才所建的資料夾 os_practice 使用 os.listdir()
印出底下的所有檔案,並將其以 List 的資料型態存入變數 text_list 當中。
然後,我們使用 for 迴圈讀取不同的檔案。
這裡要小心的是,我們使用了 endswith()
這個函式來確認檔案是否以 .txt 結尾,若是,我們這才進行後面的處理。
可以看到,我們 open 了一個檔案,首先輸入檔案的位置(也就是在 os_practice 下),然後使用模式 "r" 讀取文本,編碼 encoding 設定為 UTF-8 (Python 中,所有字元的編碼都是 UTF-8, Windows 底下若不設定通常會報錯)。
於是,我們就迴圈印出文本中的內容。
那,如果我們想要修改某個文本呢?
以第一個文本為例,我們的文本為:
text01.txt: 今天天氣真好!
那今天我們做點小小的修改:
newContent = '你確定今天天氣真的好嗎?' open('os_practice/text01.txt', 'w', encoding='utf-8').write(newContent) print('text01.txt:',open('os_practice/text01.txt', 'r', encoding='utf-8').read())
Output:
text01.txt: 你確定今天天氣真的好嗎?
我們可以看到,我們將 newContent 這個變數裡頭的文字存入了 text01.txt 裡頭,然後它取代了原先的內容。
那如果今天我們並不想取代原本的內容,只是想要在後頭新增東西呢?
這時,我們需要將我們的模式 "w" 更改為模式 "a"。
我們以 text02 舉例:
text02.txt: 今天天氣真差!
然後我們對剛才的程式做一點小小的修改。
newContent = '真的假的啊喂。' open('os_practice/text02.txt', 'a', encoding='utf-8').write(newContent) print('text02.txt:', open('os_practice/text02.txt', 'r', encoding='utf-8').read())
Output:
text02.txt: 今天天氣真差!真的假的啊喂。
如何?我們是不是沒有修改本來的文字,而是直接更新在後頭了呢?
以上便是今天的 Python 基本教學。
很快地,下次的筆記可能是基本教學的最後一次筆記了 —— 接下來我會紀錄點比較重要、且比較實戰的東西了。
我希望我會喜歡寫那些東西。