iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Software Development

跟著 OXXO 一起學 Python系列 第 44

( Day 21.1 ) Python 檔案操作 os

  • 分享至 

  • xImage
  •  

Python 的標準函式「os」提供了操作系統中檔案的方法,可以針對檔案進行重新命名、編輯、刪除等相關操作,這篇教學將會介紹 os 常用的方法。

原文參考:檔案操作 os

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

如果使用 Colab,需要和 Google 雲端硬碟連動,請參考:連動 Google Drive

os 常用方法

下方列出幾種 os 模組常用的方法 ( 參考 Python 官方文件:os 多種操作系統接口 ):

方法 參數 說明
getcwd() 取得目前程式的工作資料夾路徑
chdir() path 改變程式的工作資料夾路徑
mkdir() folder 建立資料夾
rmdir() folder 刪除空資料夾
listdir() folder 列出資料夾裡的內容
open() file, mode 開啟檔案
write() string 寫入內容到檔案
rename() old, new 重新命名檔案
remove() file 刪除檔案
stat() file 取得檔案的屬性
close() file 關閉檔案
path 取得檔案的各種屬性
system 執行系統命令 ( 等同使用 cmd 或終端機輸入指令 )

import os

要使用 os 必須先 import os 模組,或使用 from 的方式,單獨 import 特定的類型。

import os
from os import chdir

getcwd()

os.getcwd() 可以取得 .py 程式運作的工作資料夾路徑,下面的程式是 Colab 預設的工作資料夾。

import os
print(os.getcwd())   # /content

chdir(path)

os.chdir(path) 可以修改 .py 程式運作的工作資料夾為指定的路徑 path,下面的程式會修改 Colab 預設的工作目錄。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
# 原本在 /content,改到 /content/drive/MyDrive/Colab Notebooks
f = open('test.txt','r')
print(f.read())    # hello world
f.close()

mkdir(folder)

os.mkdir(folder) 可以在指定的目錄下,建立一個新的資料夾。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
os.mkdir('demo')         # 建立一個名為 demo 的資料夾
os.mkdir('demo/hello')   # 建立一個在 demo 資料夾裡的 hello 資料夾

rmdir(folder) {a4}

os.rmdir(folder) 會刪除一個「空」的資料夾 ( 裡面不能有其他檔案或資料夾 )。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
os.rmdir('demo')   # 如果 demo 資料夾是空的,就會被刪除

listdir(folder)

os.listdir(folder) 會以串列的形式,列出資料夾中所有的內容。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
os.listdir('demo')     # ['demo.txt', '.ipynb_checkpoints']

open(file, mode)

os.open(file, mode) 可以開啟指定的檔案,開啟檔案時需要設定模式 mode ( 更多參考:os.open ),如果需要多種模式可使用「|」區隔,常用的模式如下表所示:

模式 說明
os.O_RDONLY 以只讀的方式打開
os.O_WRONLY 以只寫的方式打開
os.O_RDWR 以讀寫的方式打開
os.O_APPEND 以追加的方式打開
os.O_CREAT 建立並打開一個新檔案
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
f = os.open('demo/demo.txt', os.O_RDWR|os.O_CREAT)   # 建立一個可讀寫的 demo.txt

write(file, str)

os.write(file, str) 可以將指定的文字寫入檔案裡,如果執行過程中出現「TypeError: a bytes-like object is required, not ‘str’」的問題,表示寫入的編碼需要轉換,只需要在後方加入「.encode」就能順利完成。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
f = os.open('demo/demo.txt', os.O_RDWR)     # 開啟 demo.txt 檔案
str = 'good morning!!!'                     # 設定寫入的文字
os.write(f, str.encode())                   # 將文字寫入檔案

rename(old, new)

os.rename(old, new) 可以將指定的檔案更換名稱,如果有副檔名表示檔案,如果沒有副檔名表示資料夾。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
os.rename('test.txt', 'demo.txt')    # 將 test.txt 更名為 demo.txt
os.rename('demo', 'demo2')           # 將 demo 資料夾更名為 demo2

remove(file)

os.remove(file) 可以刪除指定的檔案。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
os.remove('demo/demo.txt')     # 刪除 demo.txt

stat(file)

os.stat(file) 可以取得指定檔案的屬性。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
print(os.stat('demo/demo.txt'))
# os.stat_result(st_mode=33152, st_ino=54, st_dev=36, st_nlink=1, st_uid=0, st_gid=0, st_size=30, st_atime=1637132386, st_mtime=1637132381, st_ctime=1637132386)

close(file)

os.close(file) 可以將開啟的檔案關閉,釋放記憶體。

path

使用 os.path 可以取得檔案的各種屬性,os.path 具有下列幾種常用的使用方法:

方法 說明
abspath(path) 回傳絕對路徑。
basename(path) 回傳檔案名稱。
dirname(path) 回傳檔案路徑。
exists(path) 判斷檔案路徑是否存在,回傳 True 或 False。
getatime(path) 回傳最近訪問時間(浮點型秒數)
getmtime(path) 回傳最近修改檔案的時間 ( 1970 年 1 月 1 日 00:00:00 開始到修改檔案的秒數 )
getctime(path) 回傳建立檔案時間。
getsize(path) 回傳檔案大小。
isabs(path) 判斷是否為絕對路徑,回傳 True 或 False。
isfile(path) 判斷路徑是否為文件,回傳 True 或 False。
isdir(path) 判斷路徑是否為目錄,回傳 True 或 False。
join(path1, path2....) 把目錄和檔案名合成一個路徑
realpath(path) 回傳 path 的真實路徑
relpath(path, start) 從 start 計算相對路徑
samefile(path1, path2) 判斷兩個檔案或目錄是否相同
sameopenfile(fp1, fp2) 判斷 fp1 和 fp2 是否指向同一檔案
samestat(stat1, stat2) 判斷stat tuple stat1 和 stat2 是否指向同一個文件
split(path) 把路徑分割成 dirname 和 basename,返回一個元組
splitext(path) 分割路徑,返回路徑名和文件副檔名的檔案

下方的程式碼,會使用 os.path 取得檔案相關資訊。

import os
path = os.getcwd() + '/drive/MyDrive/Colab Notebooks/test.txt'
print(os.path.basename(path))   # test.txt
print(os.path.dirname(path))    # /content/drive/MyDrive/Colab Notebooks
print(os.path.exists(path))     # True
print(os.path.getatime(path))   # 1637052462.0
print(os.path.getmtime(path))   # 1637052462.0
print(os.path.getctime(path))   # 1637052462.0
print(os.path.getsize(path))    # 30
print(os.path.isabs(path))      # True
print(os.path.isfile(path))     # True
print(os.path.isdir(path))      # False
print(os.path.realpath(path))   # /content/drive/MyDrive/Colab Notebooks/test.txt
print(os.path.samefile(path, path))  # True
print(os.path.split(path))        # ('/content/drive/MyDrive/Colab Notebooks', 'test.txt')
print(os.path.splitdrive(path))   # ('', '/content/drive/MyDrive/Colab Notebooks/test.txt')
print(os.path.splitext(path))     # ('/content/drive/MyDrive/Colab Notebooks/test', '.txt')
print(os.path.join('content','drive','test.txt'))   # content/drive/test.txt

system

os.system(命令) 的效果等同於在電腦的終端機或 cmd 裡,輸入並執行系統命令,但由於作業系統的不同,命令也會有所不同,下方列出一些 Windows 和 Linux 裡常用的指令:

Windows:

指令 說明
cd 切換資料夾位置
cls 清除螢幕
md/mkdir 建立資料夾
rd/rmdir 刪除資料夾
ren/rename 重新命名
dir 列出目錄與子目錄
del/erase 刪除一個或多個檔案
move 移動檔案
copy 複製檔案
xcopy 複製檔案與樹狀目錄

Linux:

指令 說明
cd 切換資料夾位置
pwd 顯示所在目錄
ls 列出檔案清單
clear 清除螢幕
mkdir 建立資料夾
rm 刪除檔案或資料夾
mv 移動/重新命名檔案
cp 複製檔案

下方的例子,效果等同於直接在終端機使用指令,建立資料夾、列出目錄、開啟檔案與刪除檔案。

import os
os.system("mkdir test")          #建立資料夾
os.system("cp test.txt ./demo")  # 複製至 demo 資料夾裡 ( Windows 使用 copy )
os.system("rm test.txt/")        # 刪除檔案 ( Windows 使用 del )
os.system("open test.txt")       # 使用預設轉體開啟 test.txt

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 20.2 ) Python 高效迭代器 itertools
下一篇
( Day 21.2 ) Python 查找匹配檔案 glob
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
hlb
iT邦新手 5 級 ‧ 2023-11-01 19:46:59

在 write(file, str) 的範例,你使用了 str 作為變數名稱,這會覆蓋 Python 內建的 str,建議改用其他名稱。

我要留言

立即登入留言