最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中-os庫的用法超詳細介紹

 更新時間:2025年06月17日 10:42:03   投稿:daisy  
OS庫是Python標(biāo)準(zhǔn)庫,包含幾百個函數(shù),提供通用的、基本的操作系統(tǒng)交互功能,這篇文章主要介紹了Python中-os庫用法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、os 庫概述

  • ?功能:提供與操作系統(tǒng)交互的接口,包括文件管理、環(huán)境變量、進程控制、路徑操作等。
  • ?跨平臺特性:大部分函數(shù)支持 Windows、Linux、macOS,但部分功能存在系統(tǒng)差異。
  • ?核心模塊
    • os:基礎(chǔ)操作系統(tǒng)接口
    • os.path:路徑處理工具
  • ?導(dǎo)入方式
import os

二、常用功能分類詳解

?1. 路徑操作(os.path 模塊)?

函數(shù)描述示例輸出示例
os.path.abspath(path)返回絕對路徑os.path.abspath("test.txt")/home/user/test.txt
os.path.dirname(path)返回路徑的目錄部分os.path.dirname("/a/b/c.txt")/a/b
os.path.basename(path)返回路徑的文件名部分os.path.basename("/a/b/c.txt")c.txt
os.path.join(path1, path2)智能拼接路徑(跨平臺安全)os.path.join("dir", "file.txt")dir/file.txt
os.path.exists(path)檢查路徑是否存在os.path.exists("test.txt")True/False
os.path.isfile(path)檢查是否為文件os.path.isfile("test.txt")True
os.path.isdir(path)檢查是否為目錄os.path.isdir("docs")True
os.path.getsize(path)獲取文件大?。ㄗ止?jié))os.path.getsize("test.txt")1024
os.path.splitext(path)分割文件名和擴展名os.path.splitext("file.txt")('file', '.txt')

2. 目錄管理

函數(shù)描述示例注意
os.getcwd()獲取當(dāng)前工作目錄print(os.getcwd())返回絕對路徑
os.chdir(path)切換當(dāng)前工作目錄os.chdir("..")失敗拋出 FileNotFoundError
os.listdir(path=".")列出目錄內(nèi)容os.listdir("/tmp")返回文件名列表(不遞歸)
os.mkdir(path)創(chuàng)建單層目錄os.mkdir("new_dir")目錄已存在時拋出 FileExistsError
os.makedirs(path)遞歸創(chuàng)建多層目錄os.makedirs("a/b/c")類似 mkdir -p
os.rmdir(path)刪除空目錄os.rmdir("empty_dir")目錄非空時拋出 OSError
os.removedirs(path)遞歸刪除空目錄os.removedirs("a/b/c")從最深層開始向上刪除

3. 文件操作

函數(shù)描述示例注意
os.remove(path)刪除文件os.remove("temp.txt")文件不存在時拋出 FileNotFoundError
os.rename(src, dst)重命名/移動文件或目錄os.rename("old.txt", "new.txt")跨磁盤移動可能失敗
os.stat(path)獲取文件狀態(tài)信息st = os.stat("file.txt")st.st_size返回包含大小、時間等的對象
os.utime(path, times)修改文件訪問/修改時間os.utime("file.txt", (atime, mtime))時間戳為秒數(shù)

4. 進程管理

函數(shù)描述示例注意
os.system(command)執(zhí)行系統(tǒng)命令os.system("ls -l")返回命令退出狀態(tài)碼
os.popen(command)執(zhí)行命令并獲取輸出(已廢棄)output = os.popen("date").read()建議改用 subprocess
os.exec*() 系列替換當(dāng)前進程(如 os.execlpos.execlp("python", "python", "script.py")執(zhí)行后原進程終止
os.kill(pid, signal)向進程發(fā)送信號os.kill(pid, signal.SIGTERM)Windows 支持有限

5. 環(huán)境變量管理

函數(shù)/屬性描述示例注意
os.environ字典形式的環(huán)境變量os.environ["PATH"]修改后僅影響當(dāng)前進程
os.getenv(key, default)獲取環(huán)境變量值os.getenv("HOME", "/tmp")鍵不存在時返回 default
os.putenv(key, value)設(shè)置環(huán)境變量(不推薦)os.putenv("DEBUG", "1")建議直接操作 os.environ

6. 系統(tǒng)信息

函數(shù)/屬性描述示例輸出示例
os.name操作系統(tǒng)名稱print(os.name)posix(Linux/macOS)
nt(Windows)
os.sep路徑分隔符os.sep/ 或 \
os.linesep行終止符os.linesep\n(Linux)
\r\n(Windows)
os.cpu_count()返回 CPU 核心數(shù)os.cpu_count()8

三、實際應(yīng)用示例

?1. 遞歸遍歷目錄

def list_files(startpath):
    for root, dirs, files in os.walk(startpath):
        level = root.replace(startpath, '').count(os.sep)
        indent = ' ' * 4 * level
        print(f"{indent}{os.path.basename(root)}/")
        subindent = ' ' * 4 * (level + 1)
        for f in files:
            print(f"{subindent}{f}")

list_files("/tmp")

 os.walk(path) 是 Python 中用于遞歸遍歷目錄結(jié)構(gòu)的核心函數(shù),可深度遍歷指定路徑下的所有子目錄和文件。以下從功能、參數(shù)、返回值到應(yīng)用場景的全面解析:

①、核心功能與運行機制

  • ?目錄樹遍歷以 path 為根目錄,逐層遍歷所有子目錄,生成目錄樹的完整結(jié)構(gòu)。支持 ?深度優(yōu)先 或 ?廣度優(yōu)先 遍歷(通過 topdown 參數(shù)控制)。

  • ?數(shù)據(jù)生成方式返回一個 ?生成器?(generator),按需生成三元組 (root, dirs, files),避免一次性加載所有路徑導(dǎo)致內(nèi)存壓力。

②、參數(shù)詳解

python

os.walk(top, topdown=True, onerror=None, followlinks=False)
參數(shù)類型作用
topstr要遍歷的根目錄路徑
topdownbool默認 True:先返回父目錄再子目錄;False 則逆序(從葉子節(jié)點向上)
onerrorcallable遍歷出錯時的回調(diào)函數(shù)(接收異常對象作為參數(shù))
followlinksbool是否追蹤符號鏈接指向的真實目錄(默認 False

③、返回值解析

每次迭代返回的三元組包含:

  • ?**root**
    當(dāng)前遍歷的目錄絕對路徑(如 "/data/images/cats")。
  • ?**dirs**
    當(dāng)前目錄下的 ?直接子目錄名列表?(不含路徑,如 ["2023", "2024"])。
  • ?**files**
    當(dāng)前目錄下的 ?文件名列表?(不含路徑,如 ["cat1.jpg", "cat2.png"])。

示例目錄結(jié)構(gòu)

markdown

root/
├── dir1/
│   ├── file1.txt
│   └── subdir/
└── dir2/
    └── file2.log

對應(yīng)的遍歷輸出:

python

# 第一次迭代
('root', ['dir1', 'dir2'], [])  
# 第二次迭代(進入 dir1)
('root/dir1', ['subdir'], ['file1.txt'])  
# 第三次迭代(進入 subdir)
('root/dir1/subdir', [], [])  
# 第四次迭代(進入 dir2)
('root/dir2', [], ['file2.log'])

 遍歷所有文件并獲取完整路徑

python

import os

for root, dirs, files in os.walk("data"):
    for file in files:
        full_path = os.path.join(root, file)  # 拼接完整路徑[3,6](@ref)
        print(f"發(fā)現(xiàn)文件:{full_path}")

2. 批量重命名文件

folder = "docs"
for filename in os.listdir(folder):
    if filename.endswith(".txt"):
        new_name = filename.replace(" ", "_")
        os.rename(
            os.path.join(folder, filename),
            os.path.join(folder, new_name)
        )

3. 安全創(chuàng)建臨時目錄

import tempfile

def create_temp_dir():
    temp_dir = tempfile.mkdtemp()
    try:
        print(f"臨時目錄已創(chuàng)建: {temp_dir}")
        # 執(zhí)行操作...
    finally:
        os.rmdir(temp_dir)
        print("臨時目錄已刪除")

四、注意事項

?1. 路徑處理

  • ?不要手動拼接路徑:使用 os.path.join() 替代字符串拼接,避免跨平臺問題:
# 錯誤方式
path = "dir" + "/" + "file.txt"  # 在Windows下失效

# 正確方式
path = os.path.join("dir", "file.txt")

2. 異常處理

  • 文件操作需捕獲常見異常:
try:
    os.remove("non_exist.txt")
except FileNotFoundError as e:
    print(f"文件不存在: {e}")

3. 安全性

  • ?謹慎使用 os.system():可能引發(fā)命令注入漏洞,優(yōu)先使用 subprocess.run()
# 危險!用戶輸入可能包含惡意命令
user_input = "some; rm -rf /"
os.system(f"echo {user_input}")

# 安全方式
import subprocess
subprocess.run(["echo", user_input], check=True)

4. 跨平臺兼容性

  • 檢查系統(tǒng)差異:
if os.name == 'posix':
    print("運行在 Unix-like 系統(tǒng)")
elif os.name == 'nt':
    print("運行在 Windows 系統(tǒng)")

五、與 shutil 庫的對比

功能os 庫shutil 庫
?文件復(fù)制?? 無直接支持shutil.copy()
?目錄刪除?? 只能刪空目錄shutil.rmtree() 遞歸刪除
?壓縮文件?? 無支持shutil.make_archive()
?元數(shù)據(jù)保留?? 需手動處理copystat() 保留權(quán)限和時間

到此這篇關(guān)于Python中-os庫用法介紹的文章就介紹到這了,更多相關(guān)Python -os庫介紹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

年辖:市辖区| 南安市| 文登市| 大庆市| 蕉岭县| 桂平市| 贵定县| 凤山市| 滨海县| 尖扎县| 土默特右旗| 滕州市| 江孜县| 新干县| 禹州市| 射阳县| 大埔区| 古田县| 乌鲁木齐县| 舟曲县| 大埔区| 夏津县| 靖州| 农安县| 江达县| 芜湖市| 微山县| 屏东县| 轮台县| 龙南县| 大名县| 尼玛县| 富宁县| 英山县| 改则县| 得荣县| 安义县| 敦化市| 通渭县| 西丰县| 乐至县|