os:系統級操作(進程、環境變量、文件描述符)os.path:路徑操作(拼接、分割、屬性查詢)shutil:高級文件操作(複製、移動、壓縮)— 推薦優先使用pathlib (Python 3.4+):面向對象路徑操作,現代首選import os
print(os.getcwd()) # 獲取當前目錄
os.chdir("/tmp") # 切換目錄
print(os.getcwd()) # 驗證切換結果
def list_files(directory):
"""僅列出普通文件,排除子目錄"""
for name in os.listdir(directory):
path = os.path.join(directory, name)
if os.path.isfile(path):
print(path)
list_files("/root")
os.mkdir("new_dir") # 創建單級目錄
os.makedirs("a/b/c", exist_ok=True) # 遞歸創建,exist_ok 防報錯
os.rmdir("empty_dir") # 刪除空目錄
shutil.rmtree("non_empty_dir") # 遞歸刪除非空目錄
import os, time
path = "/etc/passwd"
# 時間戳獲取(返回浮點數秒數,自 1970-01-01)
atime = os.path.getatime(path) # 最後訪問時間
mtime = os.path.getmtime(path) # 最後修改時間
ctime = os.path.getctime(path) # 創建時間 (Windows) / 元數據變更時間
# 格式化輸出
print(f"Last access: {time.ctime(atime)}")
print(f"Last modify: {time.ctime(mtime)}")
# 統一獲取:os.stat()
stat = os.stat(path)
print(f"Size: {stat.st_size} bytes")
print(f"Mode: {oct(stat.st_mode)}")
print(f"UID: {stat.st_uid}, GID: {stat.st_gid}")
# 判斷類型
os.path.isfile(path) # 是否普通文件
os.path.isdir(path) # 是否目錄
os.path.islink(path) # 是否符號鏈接
os.path.exists(path) # 是否存在
os.path.ismount(path) # 是否掛載點
# 路徑拆分與拼接
dirname, basename = os.path.split("/etc/passwd") # ("/etc", "passwd")
dirname = os.path.dirname(path)
basename = os.path.basename(path)
full = os.path.join("/etc", "passwd") # 跨平台安全拼接
abs_path = os.path.abspath("relative/path") # 轉絕對路徑
real_path = os.path.realpath("/link/to/file") # 解析符號鏈接
# 文本模式(推薦 with 語句自動關閉)
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read() # 全讀
# lines = f.readlines() # 按行讀列表
# for line in f: # 逐行迭代(記憶體友好)
with open("output.txt", "w", encoding="utf-8") as f:
f.write("Hello\n")
f.writelines(["Line1\n", "Line2\n"])
# 二進制模式
with open("image.png", "rb") as f:
data = f.read()
from pathlib import Path
p = Path("/etc/passwd")
print(p.exists())
print(p.is_file())
print(p.stat().st_size)
print(p.read_text(encoding="utf-8"))
print(p.parent) # 父目錄
print(p.name) # 文件名
print(p.suffix) # 擴展名
print(p.with_suffix(".bak")) # 替換擴展名
# 遞歸遍歷
for py_file in Path(".").rglob("*.py"):
print(py_file)
os.path.join 或 Path /,不要手動拼接 "/" + nameencoding="utf-8",避免平台默認編碼差異read() 爆內存try/except OSError熟練掌握 os/os.path/pathlib 三大工具集,能高效解決 99% 的文件系統操作需求。