引言

  文件操作是構建智能應用的基礎能力。當我們需要管理大量訓練數據、自動化處理模型文件時,Python的文件操作功能就能自動化完成這些任務。

一、操作文件路徑

1、獲取當前路徑:getcwd()

  在Python中處理文件時,首先要定位文件的具體位置,這通過文件路徑實現。os模塊為路徑操作提供了多種工具。例如,os.getcwd()函數可用於獲取當前Python腳本所在的目錄路徑。

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

python學習筆記9.2-文件及文件夾操作 -_Python

2、創建文件夾:mkdir()和makedirs()

  os模塊中創建文件夾的兩個主要函數是mkdir()和makedirs(),兩者的關鍵區別在於對父目錄的處理方式:mkdir() 只能創建單個文件夾,如果指定的父目錄路徑不存在則會報錯;而makedirs() 可以遞歸創建多層嵌套文件夾,即使上級目錄不存在也會自動創建。

import os
# 創建單個文件夾
try:
    os.mkdir("test_folder")  # 在當前目錄創建test_folder文件夾
    print("文件夾創建成功!")
except FileExistsError:
    print("文件夾已存在!")
# 創建多層文件夾
os.makedirs("project/data/images", exist_ok=True)
# exist_ok=True表示如果文件夾已存在也不會報錯
print("多層文件夾創建成功!")

python學習筆記9.2-文件及文件夾操作 -_重命名_02

python學習筆記9.2-文件及文件夾操作 -_Python_03

3、拼接路徑:join()

    os.path.join() 是用於拼接多個路徑組件的函數,它能根據當前操作系統自動選用正確的路徑分隔符,從而避免手動使用字符串拼接可能導致的錯誤。

import os
correct_path = os.path.join("folder", "subfolder", "file.txt")
print(f"正確方式:{correct_path}")

python學習筆記9.2-文件及文件夾操作 -_Python_04

4、跳轉路徑:chdir()

  os.chdir() 函數用於動態更改 Python 程序的當前工作目錄。通過它可以將工作環境切換到其他位置,例如使用 os.chdir("..") 切換到上級目錄,或使用像 os.chdir("C:/Users") 這樣的絕對路徑切換到系統特定文件夾。

import os
print(f"切換前的工作目錄:{os.getcwd()}")
# 切換到上一級目錄
os.chdir("..")
print(f"切換到上一級目錄:{os.getcwd()}")
# 切換到指定目錄(絕對路徑)
os.chdir("C:/Users")
print(f"切換到指定目錄:{os.getcwd()}")

python學習筆記9.2-文件及文件夾操作 -_Python_05

5、判斷相對路徑和絕對路徑:isabs()

  文件路徑分為絕對路徑和相對路徑:絕對路徑是從系統根目錄開始的完整地址,而相對路徑則基於當前目錄進行定位。在 Python 中,可以使用 os.path.isabs() 函數來判斷給定的路徑字符串是否為絕對路徑,它會針對不同操作系統的路徑格式(如 Windows 的盤符格式或 Linux/macOS 的根目錄格式)返回布爾值。通過遍歷並檢測各種路徑。

import os
# 測試各種路徑
paths = [
    "data/image.jpg",           # 相對路徑
    "../parent_folder/file.txt", # 相對路徑(上級目錄)
    "C:/Windows/system32",      # 絕對路徑(Windows)
    "/usr/local/bin",          # 絕對路徑(Linux)
    "D:\\Documents\\test.docx"  # 絕對路徑
]
for path in paths:
    is_absolute = os.path.isabs(path)
    print(f"路徑:'{path}'")
    print(f"  是否為絕對路徑:{is_absolute}")
    print(f"  類型:{'絕對路徑' if is_absolute else '相對路徑'}")

python學習筆記9.2-文件及文件夾操作 -_重命名_06

6、獲取文件路徑和文件名:basename()、dirname()、split()

  os.path模塊提供了用於解析路徑的函數,其中 os.path.basename() 可以從完整路徑中提取出文件名部分,而 os.path.dirname() 則用於提取路徑中的目錄部分。如果需要同時獲取這兩部分,可以使用 os.path.split() 函數,它會將路徑拆分為目錄和文件名兩個部分,並以元組形式返回。

import os
# 示例路徑
file_path = r"\python\PythonProject1\project\data\images\test.txt"
# 獲取文件名
filename = os.path.basename(file_path)
print(f"文件名:{filename}")
# 獲取目錄名
directory = os.path.dirname(file_path)
print(f"目錄名:{directory}")
# 同時獲取目錄和文件名
dir_part, file_part = os.path.split(file_path)
print(f"拆分結果:目錄={dir_part}, 文件={file_part}")

python學習筆記9.2-文件及文件夾操作 -_#python_07

二、操作文件和文件夾

1、查詢文件大小:getsize()

  os.path.getsize() 函數用於獲取指定文件的字節大小,它接受文件路徑作為參數並返回該文件佔用的字節數。在使用中,我們先通過 os.path.exists() 檢查文件是否存在,再調用該函數獲取大小信息,這樣可以避免因文件不存在而引發錯誤。

import os
# 檢查文件大小
file_path = "test.txt"
# 先檢查文件是否存在
if os.path.exists(file_path):
    size = os.path.getsize(file_path)
    print(f"文件 '{file_path}' 的大小是 {size} 字節")

python學習筆記9.2-文件及文件夾操作 -_#開發語言_08

2、刪除文件和文件夾:remove()、rmdir()

  在Python中刪除文件和文件夾有兩種方法:os.remove() 用於刪除單個文件;os.rmdir() 只能刪除空的文件夾,若文件夾非空則會報錯。

import os
# 創建一個測試文件
with open("test1.txt", "w") as f:
    f.write("這是一個測試文件")
# 創建一個測試文件夾
os.makedirs("cc1", exist_ok=True)
print("刪除前檢查:")
print(f"test1.txt 是否存在:{os.path.exists('test1.txt')}")
print(f"cc1 是否存在:{os.path.exists('cc1')}")
# 刪除文件
if os.path.exists("test1.txt"):
    os.remove("test1.txt")
    print("文件刪除成功!")
# 刪除空文件夾(如果文件夾非空會報錯)
try:
    os.rmdir("cc1")
    print("空文件夾刪除成功!")
except OSError as e:
    print(f"刪除失敗:{e}")
print("\n刪除後檢查:")
print(f"test1.txt 是否存在:{os.path.exists('test1.txt')}")
print(f"cc1是否存在:{os.path.exists('cc1')}")

python學習筆記9.2-文件及文件夾操作 -_重命名_09

3、重命名文件或文件夾:rename()、renames()

  os.rename() 和 os.renames() 均可用於重命名文件或文件夾。兩者的區別在於路徑處         理:os.renames()僅進行重命名或移動操作,若目標路徑中的目錄不存在則會報錯;而 os.renames() 在執行重命名或移動的同時,會自動遞歸創建目標路徑中所有不存在的父目錄。

import os
# 重命名文件夾
os.rename("cc1", "cc2")
print("文件夾重命名完成!")
# 重命名文件
os.rename("test2.txt", "test1.txt")
print("文件重命名完成!")
# 使用renames()自動創建目錄
with open("test3.txt", "w") as f:
    f.write("人工智能")
# 將文件移動到不存在的目錄,renames()會自動創建目錄
os.renames("test3.txt", "cc2/test4.txt")

python學習筆記9.2-文件及文件夾操作 -_絕對路徑_10

python學習筆記9.2-文件及文件夾操作 -_#開發語言_11

4、複製文件

  os庫中我們可以用os.link()創建硬鏈接來實現複製文件。

import os
os.link(r'D:\python\PythonProject1\test1.txt',r'D:\python\PythonProject1\cc2\test2.txt')

python學習筆記9.2-文件及文件夾操作 -_絕對路徑_12

5、獲取文件夾的全部文件名:listdir()

  os.listdir() 函數用於獲取指定目錄中包含的所有條目的名稱列表。該函數接收一個路徑字符串作為參數,並返回一個由條目名稱組成的列表。

import os
print("路徑中有:",os.listdir('.'))

python學習筆記9.2-文件及文件夾操作 -_#開發語言_13

6、判斷文件和文件夾:exists()、isfile()、isdir()

  os.path模塊提供用於判斷路徑狀態的函數:os.path.exists() 用於檢查指定路徑(文件或文件夾)是否存在;os.path.isfile() 專門判斷該路徑是否指向一個存在的文件;而 os.path.isdir() 則用於判斷路徑是否指向一個存在的目錄(文件夾)。

import os
path = r'D:\python\PythonProject1\test1.txt'
print(os.path.exists(path),end='\t')
print(os.path.isfile(path),end='\t')
print(os.path.isdir(path),end='\t')

python學習筆記9.2-文件及文件夾操作 -_重命名_14

三、執行其他應用程序

1、命令提示符窗口或終端

  終端和命令提示符是用户與計算機操作系統進行文本指令交互的界面。在Windows系統中,它被稱為命令提示符或CMD。它們的基本功能相同:接收用户輸入的命令(例如 cd、dir、python 等),傳遞給操作系統執行,並將結果以文字形式顯示出來。

2、使用os.system()執行命令

  os.system() 函數允許Python程序直接執行操作系統,其效果等同於在系統自帶的終端或命令提示符窗口中手動輸入並運行相應的命令。不過需要注意的是,由於其直接與系統交互,使用時需注意安全性和跨平台兼容性,且它通常只返回命令的執行狀態碼,而非命令輸出的結果。

import os
print("1. 查看目錄內容:")
os.system("dir")
print("\n2. 創建新目錄:")
os.system("mkdir system_test_folder")

python學習筆記9.2-文件及文件夾操作 -_#開發語言_15

3、使用os.popen()獲取命令輸出

  os.popen() 函數與 os.system() 類似,都用於在 Python 中執行操作系統的命令。但區別在於,os.popen() 會打開一個通往命令輸入/輸出的管道,允許您捕獲命令執行後返回的輸出結果,而不是像 os.system() 那樣直接將結果打印到屏幕上。

import os
print("獲取當前目錄路徑:")
result = os.popen("cd").read()
print(f"當前目錄:{result.strip()}")

python學習筆記9.2-文件及文件夾操作 -_#python_16

四、sys庫

1、獲取Python信息

  sys模塊是 Python 標準庫中用於與解釋器及其運行環境進行交互的核心工具。它提供了訪問和操縱Python運行時系統不同部分的接口,例如:檢索命令行參數 (sys.argv)、查看已導入模塊 (sys.modules)、處理標準輸入/輸出流 (sys.stdin, sys.stdout, sys.stderr)、獲取解釋器版本信息,以及控制程序退出 (sys.exit())。

import sys
print(f"  版本號:{sys.version}")
print(f"  版本信息元組:{sys.version_info}")
print(f" 最大數據長度:{sys.maxsize}")
print(f" 操作系統:{sys.platform}")
print(f" 版權信息:{sys.copyright}")
print(f" Python解釋器的目錄地址:{sys.executable}")
print(f" 當前Python的安裝目錄地址:{sys.executable}")

python學習筆記9.2-文件及文件夾操作 -_Python_17

  我們可以簡單驗證用户的python版本是否滿足我們代碼的需求。

import sys
if (sys.version_info[0]*10+sys.version_info[1])/10 < 3.7:
    print('您的Python版本過低,請安裝3.7以上版本')
    sys.exit()
else:
    print('版本正確,代碼將繼續運行')
print('hello world')

python學習筆記9.2-文件及文件夾操作 -_Python_18

2、退出程序

sys.exit() 是用於立即終止 Python 程序執行的函數。它可以接收一個可選的退出碼作為參數(通常 0 表示正常退出,非零值表示異常退出),程序執行到該語句時會直接結束,其後的所有代碼都不會再運行。

import sys
# 最簡單的退出方式
print("程序開始運行...")
# 正常情況退出
for i in range(3):
    print(f"完成任務 {i + 1}")
print("所有任務完成!準備退出...")
sys.exit(0)  # 0表示正常退出
print("這行代碼不會被執行")  # 因為上面已經退出了

python學習筆記9.2-文件及文件夾操作 -_#開發語言_19

3、argv獲取輸入命令

  sys.argv是一個列表,用於獲取在命令行中運行 Python 腳本時輸入的所有參數。列表的第一個元素(sys.argv[0])是當前執行的腳本名稱,後續元素則依次對應命令行中傳入的各個參數(以空格分隔)。通過解析這些參數,可以在程序啓動時接收外部輸入,從而控制程序行為。

import sys
# sys.argv 是一個列表,包含所有命令行參數
print("所有參數:", sys.argv)
# 第0個是腳本名
print("腳本名:", sys.argv[0])
# 我們輸入的參數
if len(sys.argv) > 1:
    name = sys.argv[1]
    print(f"你好,{name}!")
if len(sys.argv) > 2:
    age = sys.argv[2]
    print(f"你今年{age}歲")

python學習筆記9.2-文件及文件夾操作 -_#python_20

  到這裏我們就完成了對操作文件的學習了,在下一章裏我們將學習numpy庫為接下來的機械學習做好準備。