文件操作 os
Python 的标准函数“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)
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
微信扫码关注
抖音扫码关注