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

Python使用os模塊操作文件與目錄的完整指南

 更新時間:2026年01月27日 09:43:17   作者:AI手記叨叨  
os 模塊是Python標準庫的一部分,無需額外安裝即可使用,它封裝了不同操作系統(tǒng)的底層系統(tǒng)調(diào)用,它可以讓我們在Python中執(zhí)行各種操作系統(tǒng)級別的任務(wù),所以本文給大家介紹了Python使用os模塊操作文件與目錄的完整指南,需要的朋友可以參考下

一、os 模塊是什么

os 模塊是Python標準庫的一部分,無需額外安裝即可使用。它封裝了不同操作系統(tǒng)(Windows、Linux、MacOS等)的底層系統(tǒng)調(diào)用,提供了一致的接口使用,它可以讓我們在Python中執(zhí)行各種操作系統(tǒng)級別的任務(wù),如創(chuàng)建/刪除目錄、遍歷文件系統(tǒng)、管理文件路徑等。

二、路徑操作

1. 獲取當前工作目錄

需求場景:

  • 需要知道腳本當前運行的位置
  • 需要基于當前目錄構(gòu)建相對路徑
  • 調(diào)試時確認程序的工作目錄是否正確

os.getcwd() 返回的是字符串形式的絕對路徑。

import os

current_dir = os.getcwd()
print(f"當前工作目錄: {current_dir}")

2. 改變工作目錄

需求場景:

  • 需要切換到特定目錄進行操作
  • 處理相對路徑前確保在正確的目錄下
  • 臨時切換到某個目錄處理文件后又需要返回原目錄

os.chdir() 會改變當前進程的工作目錄。如果目標目錄不存在會拋出 FileNotFoundError

os.chdir('/path/to/new/directory')
print(f"新工作目錄: {os.getcwd()}")

3. 路徑拼接

需求場景:

  • 構(gòu)建跨平臺的路徑時(Windows用\,Linux和Mac用/)
  • 動態(tài)組合路徑各部分
  • 避免手動拼接路徑導致的錯誤

使用 os.path.join() 可以安全地拼接路徑,它會自動處理不同操作系統(tǒng)的路徑分隔符。

path = os.path.join('folder', 'subfolder', 'file.txt')
print(f"拼接后的路徑: {path}")
# 在Windows上輸出: folder\subfolder\file.txt
# 在Linux/Mac上輸出: folder/subfolder/file.txt

4. 路徑分解與提取

需求場景:

  • 需要單獨獲取文件名或目錄名
  • 批量處理文件擴展名
  • 分析用戶提供的文件路徑

os.path.dirname()os.path.basename() 是互補的操作。os.path.splitext()只會分離最后一個擴展名,對于多重擴展名(如".tar.gz")需要特別注意。

file_path = "/home/user/documents/report.txt"

# 獲取路徑的目錄部分
dir_name = os.path.dirname(file_path)
print(f"目錄部分: {dir_name}")  # /home/user/documents

# 獲取文件名部分
base_name = os.path.basename(file_path)
print(f"文件名部分: {base_name}")  # report.txt

# 分割文件擴展名
name, ext = os.path.splitext(base_name)
print(f"文件名: {name}, 擴展名: {ext}")  # 文件名: report, 擴展名: .txt

5. 路徑有效性檢查

需求場景:

  • 處理輸入路徑前驗證有效性
  • 確保文件/目錄存在再進行操作
  • 編寫安裝腳本時需要檢查目標位置

這些檢查函數(shù)不會拋出異常,而是返回布爾值。對于符號鏈接,os.path.isfile()os.path.isdir()會跟隨鏈接檢查目標文件/目錄。

path = "/some/path/to/file.txt"

print(f"路徑是否存在: {os.path.exists(path)}")
print(f"是否是文件: {os.path.isfile(path)}")
print(f"是否是目錄: {os.path.isdir(path)}")
print(f"是否是絕對路徑: {os.path.isabs(path)}")

三、目錄操作

1. 創(chuàng)建目錄

需求場景:

  • 程序需要生成輸出目錄
  • 安裝程序創(chuàng)建必要的目錄結(jié)構(gòu)
  • 上傳文件前確保目標目錄存在

os.mkdir() 只能創(chuàng)建單級目錄,如果父目錄不存在會拋出 FileNotFoundError。而 os.makedirs()可以遞歸創(chuàng)建多級目錄,exist_ok=True 參數(shù)使得目錄已存在時不會報錯。

# 創(chuàng)建單個目錄
os.mkdir('new_directory')

# 創(chuàng)建多級目錄
os.makedirs('parent/child/grandchild', exist_ok=True)  # exist_ok=True 避免目錄已存在時報錯

2. 刪除目錄

需求場景:

  • 清理臨時目錄
  • 卸載程序刪除相關(guān)目錄
  • 定期清理舊數(shù)據(jù)

os.rmdir()只能刪除空目錄,否則會拋出 OSError。要刪除非空目錄需要使用 shutil.rmtree(),它會遞歸刪除整個目錄樹,使用時需特別小心。

# 刪除空目錄
os.rmdir('empty_directory')

# 刪除目錄樹 (謹慎使用!)
import shutil
shutil.rmtree('directory_with_contents')

3. 遍歷目錄

需求場景:

  • 批量處理目錄中的文件
  • 實現(xiàn)文件搜索功能
  • 統(tǒng)計目錄內(nèi)容
  • 備份目錄結(jié)構(gòu)

os.listdir() 只返回指定目錄的直接內(nèi)容,不包含子目錄內(nèi)容。os.walk() 是生成器函數(shù),會遞歸遍歷所有子目錄,返回三元組(當前目錄路徑,子目錄列表,文件列表)??梢酝ㄟ^修改 dirs 列表來控制遍歷過程。

# 列出目錄內(nèi)容
print("當前目錄內(nèi)容:")
for item in os.listdir('.'):
    print(item)

# 使用os.walk遞歸遍歷目錄
print("\n遞歸遍歷目錄結(jié)構(gòu):")
for root, dirs, files in os.walk('.'):
    print(f"當前目錄: {root}")
    print(f"子目錄: {dirs}")
    print(f"文件: {files}")
    print("-" * 40)

四、文件操作

1. 文件重命名

需求場景:

  • 批量重命名文件
  • 添加時間戳到文件名

os.rename() 也可以用于移動文件(如果在不同目錄下)。如果目標文件已存在,在Windows上會拋出 FileExistsError,在Unix系統(tǒng)上會靜默覆蓋。

os.rename('old_name.txt', 'new_name.txt')

# 為日志文件添加日期前綴
log_file = "app.log"
today = datetime.now().strftime("%Y%m%d")
new_name = f"{today}_{log_file}"
os.rename(log_file, new_name)

2. 刪除文件

需求場景:

  • 清理臨時文件
  • 實現(xiàn)文件刪除功能
  • 定期清理舊文件

os.remove() 只能刪除文件,不能刪除目錄。刪除前最好檢查文件是否存在和是否有權(quán)限刪除。

os.remove('file_to_delete.txt')
# 刪除一周前的臨時文件(基于文件修改時間進行選擇性刪除)
for file in os.listdir('temp'):
    file_path = os.path.join('temp', file)
    if os.path.isfile(file_path):
        file_age = time.time() - os.path.getmtime(file_path)
        if file_age > 7 * 24 * 3600:  # 7天
            os.remove(file_path)

3. 獲取文件信息

需求場景:

  • 顯示文件詳細信息
  • 按大小/時間篩選文件

os.stat() 返回的 st_mtime 和 st_ctime 是時間戳(秒數(shù)),可以使用 datetime.fromtimestamp() 轉(zhuǎn)換為可讀格式。

file_stat = os.stat('some_file.txt')
print(f"文件大小: {file_stat.st_size} 字節(jié)")
print(f"最后修改時間: {file_stat.st_mtime}")
print(f"創(chuàng)建時間: {file_stat.st_ctime}")

五、環(huán)境變量操作

需求場景:

  • 讀取系統(tǒng)配置
  • 根據(jù)環(huán)境改變程序行為(開發(fā)/生產(chǎn)環(huán)境)
  • 安全存儲敏感信息(如API密鑰)

通過 os.environ 設(shè)置的環(huán)境變量只在當前進程及其子進程中有效,不會影響系統(tǒng)環(huán)境變量。os.getenv() 比直接訪問 os.environ 更安全,因為當變量不存在時可以指定默認值。

# 獲取環(huán)境變量
home_dir = os.getenv('HOME')  # 或 os.environ.get('HOME')
print(f"用戶主目錄: {home_dir}")

# 設(shè)置環(huán)境變量(僅當前進程有效)
os.environ['MY_VAR'] = 'some_value'
print(f"MY_VAR: {os.getenv('MY_VAR')}")

六、跨平臺路徑處理

需求場景:

  • 編寫需要在多個操作系統(tǒng)運行的腳本
  • 處理用戶提供的不同格式的路徑
  • 確保路徑比較的正確性

os.path 模塊提供了跨平臺的路徑處理方法,os.path.normpath() 會解析路徑中的 . 和 …,并標準化路徑分隔符。os.path.abspath() 會將路徑轉(zhuǎn)換為絕對路徑,基于當前工作目錄。os.path.commonpath()os.path.commonprefix() 更準確,因為它會考慮路徑分隔符。

path = "/home/user/docs/file.txt"

print(f"路徑分隔符: {os.path.sep}")  # Linux: /, Windows: \
print(f"路徑標準化: {os.path.normpath('docs/../docs/file.txt')}")
print(f"絕對路徑: {os.path.abspath('file.txt')}")
print(f"共同前綴: {os.path.commonprefix(['/usr/lib', '/usr/local/lib'])}")  # /usr/l
print(f"共同路徑: {os.path.commonpath(['/usr/lib', '/usr/local/lib'])}")  # /usr

七、實用示例

示例1:批量重命名文件

需求場景:

  • 整理照片庫(添加日期/地點前綴)
  • 標準化下載的文件名
  • 批量修改項目中的資源文件名

示例展示了如何批量修改文件名。在實際應(yīng)用中,可以擴展為更復(fù)雜的重命名規(guī)則,如添加序號、修改擴展名、根據(jù)文件內(nèi)容重命名等。

def batch_rename(directory, prefix):
    """為目錄中的所有文件添加前綴"""
    for filename in os.listdir(directory):
        if os.path.isfile(os.path.join(directory, filename)):
            new_name = prefix + filename
            os.rename(
                os.path.join(directory, filename),
                os.path.join(directory, new_name)
            )
            print(f"重命名: {filename} -> {new_name}")

# 使用示例
batch_rename('./photos', 'vacation_')

示例2:查找特定擴展名的文件

需求場景:

  • 收集所有日志文件(.log)進行分析
  • 查找項目中的所有圖片資源(.jpg,.png)
  • 統(tǒng)計源代碼文件數(shù)量(.py等)

使用 os.walk() 遞歸搜索目錄。file.endswith() 是大小寫敏感的,如果需要不區(qū)分大小寫,可以改為 file.lower().endswith(extension.lower())

def find_files_by_extension(directory, extension):
    """遞歸查找目錄中特定擴展名的文件"""
    matches = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(extension):
                matches.append(os.path.join(root, file))
    return matches

# 使用示例
py_files = find_files_by_extension('.', '.py')
print("找到的Python文件:")
for file in py_files:
    print(file)

示例3:計算目錄大小

需求場景:

  • 實現(xiàn)磁盤空間檢查功能
  • 限制用戶上傳目錄的大小
  • 分析項目各模塊占用空間

這個函數(shù)計算的是目錄中所有文件的實際大小總和,不包括目錄元數(shù)據(jù)占用的空間。跳過了符號鏈接以避免重復(fù)計算或無限遞歸。對于非常大的目錄,可能需要優(yōu)化性能。

def get_directory_size(directory):
    """計算目錄總大小(字節(jié))"""
    total = 0
    for dirpath, dirnames, filenames in os.walk(directory):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            # 跳過符號鏈接
            if not os.path.islink(fp):
                total += os.path.getsize(fp)
    return total

# 使用示例
size = get_directory_size('./')
print(f"目錄總大小: {size} 字節(jié) ({size/1024/1024:.2f} MB)")

八、安全注意事項

  1. 使用 os.path 而不是手動拼接路徑,確??缙脚_兼容性
  2. 執(zhí)行刪除操作前先檢查路徑是否存在
  3. 處理用戶提供的路徑時要小心,防止目錄遍歷攻擊
  4. 考慮使用 try-except 處理可能的異常

文件操作可能引發(fā)多種異常,如權(quán)限不足、文件不存在、路徑無效等。對于關(guān)鍵操作,建議先檢查再執(zhí)行,并做好異常處理。

try:
    os.remove('important_file.txt')
except FileNotFoundError:
    print("文件不存在,無需刪除")
except PermissionError:
    print("沒有刪除文件的權(quán)限")

九、總結(jié)

掌握Python 的 os 模塊,為操作文件和目錄提供更多便利:

  • 安全地處理各種路徑操作
  • 創(chuàng)建、刪除和遍歷目錄結(jié)構(gòu)
  • 管理文件和獲取文件信息
  • 訪問和修改環(huán)境變量
  • 編寫跨平臺的腳本

在實際開發(fā)中,可以根據(jù)具體需求選擇合適的函數(shù),并注意異常處理和跨平臺兼容性。

以上就是Python使用os模塊操作文件與目錄的完整指南的詳細內(nèi)容,更多關(guān)于Python os模塊操作文件與目錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python海龜繪圖詳解

    Python海龜繪圖詳解

    python2.6版本中后引入的一個簡單的繪圖工具,叫做海龜繪圖(Turtle Graphics),出現(xiàn)在1966年的Logo計算機語言。海龜繪圖(turtle庫)是python的內(nèi)部模塊,使用前導入即可。本文就帶大家深入了解一下海龜繪圖,快來跟隨小編一起學習吧
    2021-12-12
  • selenium+python配置chrome瀏覽器的選項的實現(xiàn)

    selenium+python配置chrome瀏覽器的選項的實現(xiàn)

    這篇文章主要介紹了selenium+python配置chrome瀏覽器的選項的實現(xiàn)。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Python異步爬蟲實現(xiàn)原理與知識總結(jié)

    Python異步爬蟲實現(xiàn)原理與知識總結(jié)

    之前有很多小伙伴想看Python異步爬蟲的有關(guān)知識總結(jié),這次它來了,文中有非常詳細的代碼示例與注釋,即使對剛開始學python的小伙伴也很友好,,需要的朋友可以參考下
    2021-05-05
  • python?requests實現(xiàn)上傳excel數(shù)據(jù)流

    python?requests實現(xiàn)上傳excel數(shù)據(jù)流

    這篇文章主要介紹了python?requests實現(xiàn)上傳excel數(shù)據(jù)流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Pycharm遠程調(diào)試原理及具體配置詳解

    Pycharm遠程調(diào)試原理及具體配置詳解

    這篇文章主要介紹了Pycharm遠程調(diào)試原理及具體配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 使用Python實現(xiàn)分別輸出每個數(shù)組

    使用Python實現(xiàn)分別輸出每個數(shù)組

    今天小編就為大家分享一篇使用Python實現(xiàn)分別輸出每個數(shù)組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python簡易實現(xiàn)任意位數(shù)的水仙花實例

    python簡易實現(xiàn)任意位數(shù)的水仙花實例

    今天小編就為大家分享一篇python簡易實現(xiàn)任意位數(shù)的水仙花實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python+Tkinter編寫一個批量IP地址歸屬地查詢

    Python+Tkinter編寫一個批量IP地址歸屬地查詢

    這篇文章主要為大家詳細介紹了Python如何結(jié)合Tkinter編寫一個批量IP地址歸屬地查詢,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-11-11
  • 解決tensorflow讀取本地MNITS_data失敗的原因

    解決tensorflow讀取本地MNITS_data失敗的原因

    這篇文章主要介紹了解決tensorflow讀取本地MNITS_data失敗的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • matplotlib legend()里字體如何修改

    matplotlib legend()里字體如何修改

    這篇文章主要介紹了matplotlib legend()里字體如何修改問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

定襄县| 平顺县| 潼关县| 宿松县| 永安市| 昌江| 大悟县| 拉萨市| 兰坪| 竹山县| 中西区| 前郭尔| 长海县| 汉中市| 嘉禾县| 凉山| 鹤岗市| 文化| 津南区| 麦盖提县| 滁州市| 佛学| 西华县| 青神县| 乌什县| 北票市| 襄汾县| 安吉县| 新巴尔虎右旗| 吉林市| 宜黄县| 伽师县| 宁海县| 库尔勒市| 临海市| 通辽市| 新巴尔虎右旗| 澄城县| 榆林市| 钦州市| 门头沟区|