Python的 os 模塊怎么用?常見文件操作有哪些?

python的os模塊是與操作系統交互的核心工具,它提供了一系列函數用于執行文件和目錄操作。常見功能包括:1.獲取當前工作目錄(os.getcwd());2.更改工作目錄(os.chdir());3.創建目錄(os.mkdir(), os.makedirs());4.刪除目錄(os.rmdir(), os.removedirs());5.列出目錄內容(os.listdir());6.重命名文件或目錄(os.rename());7.刪除文件(os.remove());8.檢查路徑是否存在(os.path.exists());9.拼接路徑(os.path.join());10.判斷路徑類型(os.path.isfile(), os.path.isdir())。為避免路徑注入攻擊,應使用絕對路徑、規范化路徑、驗證路徑合法性并避免直接拼接用戶輸入。此外,os.walk()可用于遞歸遍歷目錄樹,并根據文件類型、大小或修改時間執行操作。處理跨平臺路徑問題時,應使用os.path模塊的相關函數確保路徑兼容性。

Python的 os 模塊怎么用?常見文件操作有哪些?

python的os模塊是與操作系統交互的橋梁,它允許你執行文件和目錄操作,運行系統命令等等。 簡單來說,它讓你用Python代碼來管理你的電腦文件系統。

Python的 os 模塊怎么用?常見文件操作有哪些?

解決方案

os模塊的核心在于提供了一系列函數,用于執行與操作系統相關的任務。下面是一些常見的文件操作,以及如何使用os模塊來實現它們:

Python的 os 模塊怎么用?常見文件操作有哪些?

  1. 獲取當前工作目錄:

    立即學習Python免費學習筆記(深入)”;

    這就像知道你當前在哪個文件夾里。

    Python的 os 模塊怎么用?常見文件操作有哪些?

    import os current_directory = os.getcwd() print(f"當前工作目錄:{current_directory}")
  2. 更改當前工作目錄:

    相當于切換到另一個文件夾。

    import os os.chdir("/path/to/your/directory") # 替換成你想要切換的目錄 print(f"當前工作目錄:{os.getcwd()}")
  3. 創建目錄:

    創建一個新的文件夾。

    import os os.mkdir("new_directory") # 創建一個名為"new_directory"的目錄 # 或者創建多層目錄 os.makedirs("new_directory/sub_directory")
  4. 刪除目錄:

    刪除一個文件夾。需要注意的是,文件夾必須為空才能刪除。

    import os os.rmdir("new_directory") # 刪除名為"new_directory"的目錄 # 刪除多層目錄 os.removedirs("new_directory/sub_directory") # 從最底層開始逐層刪除
  5. 列出目錄中的文件:

    查看文件夾里有哪些文件和子文件夾。

    import os files = os.listdir(".") # 列出當前目錄下的所有文件和目錄 print(f"當前目錄下的文件:{files}")
  6. 重命名文件或目錄:

    給文件或文件夾改個名字。

    import os os.rename("old_name.txt", "new_name.txt") # 將"old_name.txt"重命名為"new_name.txt"
  7. 刪除文件:

    刪除一個文件。

    import os os.remove("file_to_delete.txt") # 刪除名為"file_to_delete.txt"的文件
  8. 檢查文件或目錄是否存在:

    確認某個文件或文件夾是否存在。

    import os if os.path.exists("my_file.txt"):     print("文件存在") else:     print("文件不存在")
  9. 拼接路徑:

    把幾個路徑片段組合成一個完整的路徑。這在跨平臺開發時非常有用,因為不同操作系統的路徑分隔符可能不同。

    import os path = os.path.join("/home", "user", "documents", "my_file.txt") print(f"拼接后的路徑:{path}")
  10. 判斷是否是文件/目錄:

    import os path = "my_file.txt" if os.path.isfile(path):     print("這是一個文件") if os.path.isdir(path):     print("這是一個目錄")

如何安全地處理文件路徑,避免路徑注入攻擊?

路徑注入攻擊是指攻擊者通過操縱文件路徑,使得程序訪問到預期之外的文件或目錄,從而導致安全漏洞。 要避免這種攻擊,關鍵在于驗證和清理用戶提供的任何文件路徑。

  • 使用絕對路徑: 盡量使用絕對路徑,避免使用相對路徑。可以通過os.path.abspath()函數將相對路徑轉換為絕對路徑。
  • 路徑規范化: 使用os.path.normpath()函數規范化路徑,它可以移除多余的分隔符、.和..,從而簡化路徑。
  • 路徑驗證: 驗證用戶提供的路徑是否在允許的范圍內。可以使用os.path.commonpath()函數檢查路徑是否在指定的根目錄下。
  • 避免直接拼接用戶輸入: 盡量避免直接將用戶輸入拼接到文件路徑中。如果必須拼接,請確保對用戶輸入進行嚴格的驗證和過濾。

例如:

import os  def secure_file_Access(base_dir, user_input):     # 1. 拼接路徑     file_path = os.path.join(base_dir, user_input)      # 2. 規范化路徑     normalized_path = os.path.normpath(file_path)      # 3. 獲取絕對路徑     abs_path = os.path.abspath(normalized_path)      # 4. 驗證路徑是否在允許的根目錄下     if not abs_path.startswith(base_dir):         raise ValueError("Unauthorized access attempt!")      # 現在可以安全地訪問文件     with open(abs_path, 'r') as f:         return f.read()  # 示例用法 base_dir = "/safe/directory" # 你的安全目錄 user_input = "data.txt" # 用戶提供的文件名  try:     content = secure_file_access(base_dir, user_input)     print(content) except ValueError as e:     print(e)

os.walk() 的高級用法:遍歷目錄樹并執行復雜操作

os.walk() 是一個非常強大的函數,它可以遞歸地遍歷目錄樹,并為每個目錄返回一個三元組:(dirpath, dirnames, filenames),分別表示當前目錄的路徑、子目錄名列表和文件名列表。

除了基本用法之外,os.walk() 還可以用于執行更復雜的操作,例如:

  • 根據文件類型執行不同的操作:

    import os for dirpath, dirnames, filenames in os.walk("."):     for filename in filenames:         if filename.endswith(".txt"):             print(f"處理文本文件: {os.path.join(dirpath, filename)}")         elif filename.endswith(".jpg"):             print(f"處理圖片文件: {os.path.join(dirpath, filename)}")
  • 跳過特定的目錄:

    import os for dirpath, dirnames, filenames in os.walk("."):     if "node_modules" in dirpath:         continue # 跳過 node_modules 目錄     print(f"當前目錄: {dirpath}")
  • 修改目錄列表,從而影響遍歷行為:

    import os for dirpath, dirnames, filenames in os.walk("."):     if "secret" in dirnames:         dirnames.remove("secret") # 阻止 os.walk 進入 "secret" 目錄     print(f"當前目錄: {dirpath}")
  • 查找特定大小或修改日期的文件:

    import os import time for dirpath, dirnames, filenames in os.walk("."):     for filename in filenames:         filepath = os.path.join(dirpath, filename)         file_size = os.path.getsize(filepath)         modification_time = os.path.getmtime(filepath)         if file_size > 1024 * 1024: # 大于 1MB             print(f"大文件: {filepath}")         if time.time() - modification_time < 86400: # 24 小時內修改過             print(f"最近修改的文件: {filepath}")

如何處理跨平臺的文件路徑問題?

不同的操作系統使用不同的路徑分隔符(例如,windows 使用 ,而 linuxmacos 使用 /)。 為了編寫跨平臺的代碼,需要使用 os.path 模塊來處理文件路徑。

  • 使用 os.path.join() 拼接路徑: os.path.join() 會根據當前操作系統自動選擇正確的路徑分隔符。
  • 使用 os.path.abspath() 獲取絕對路徑: 絕對路徑是與平臺無關的。
  • 使用 os.path.normpath() 規范化路徑: 它可以將平臺相關的路徑轉換為規范化的形式。
  • 使用 os.path.split() 分割路徑: 它可以將路徑分割成目錄和文件名兩部分。

例如:

import os  # 拼接路徑 path = os.path.join("folder", "subfolder", "file.txt") print(f"拼接后的路徑: {path}")  # 獲取絕對路徑 abs_path = os.path.abspath(path) print(f"絕對路徑: {abs_path}")  # 規范化路徑 norm_path = os.path.normpath("//folder//subfolder/../file.txt") print(f"規范化后的路徑: {norm_path}")  # 分割路徑 dirname, filename = os.path.split(path) print(f"目錄: {dirname}, 文件名: {filename}")

這些技巧可以幫助你編寫更健壯、更可移植的Python代碼,以便在不同的操作系統上運行。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享