6.1 檔案操作
Python 提供了很多內建函數和模組來處理檔案和目錄。主要的操作是使用 內建模組 os,shutil 以及其他。
檔案的三個主要操作:
- 複製
- 移動
- 刪除
要執行這些操作,shutil 模組非常適合。
檔案複製
import shutil
shutil.copy('source.txt', 'destination.txt')
檔案移動
import shutil
shutil.move('source.txt', 'destination.txt')
檔案刪除
import os
os.remove('example.txt')
比以往任何時候都容易。
6.2 檢查檔案是否存在
常常需要檢查某個檔案是否存在。為此,模組 os 提供了專門的方法 — exists()。
檢查檔案是否存在
import os
if os.path.exists('example.txt'):
print("File exists")
else:
print("File does not exist")
# 如果檔案不存在,程式會執行 else 區塊中的動作。
# 例如,可以顯示警告,創建新檔案或退出程式。
如果檔案不存在,程式可以通過條件來處理,或者引發異常。
6.3 檢查物件類型:檔案或目錄
常常需要檢查某個物件是檔案還是目錄。例如,當你讀取某個目錄中的所有內容時,檔案需要一一處理,而目錄則需要另一種處理方式。
對於這種情況,有兩個專門的方法 — isdir(),它檢查物件是否為目錄,isfile(),它檢查物件是否為檔案。
檢查是否為目錄
if os.path.isdir('example_directory'):
print("這是目錄")
else:
print("這不是目錄")
檢查是否為檔案
if os.path.isfile('example_file'):
print("這是檔案")
else:
print("這不是檔案")
這些是非常有用的功能,使用頻率超乎你想像。 :)
6.4 處理路徑
模組 os 有一個子模組 os.path,它包含有用的函數來處理檔案和目錄。以下是其中一些:
獲取檔案擴展名
函數 splitext() 把檔名分成兩部分,並返回一個包含兩個元素的列表:名稱和擴展名。
import os.path
# 獲取檔案擴展名
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"檔案擴展名: {file_extension}")
獲取沒有擴展名的檔名
import os.path
# 獲取沒有擴展名的檔名
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"無擴展名的檔名: {file_name}")
從路徑中獲取檔名
函數 basename() 僅返回檔名,切掉整個路徑。
import os.path
# 從路徑中獲取檔名
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"檔名: {file_name}")
從路徑中獲取目錄
也可以很輕鬆地使用 函數 dirname() 獲取僅包含目錄的檔名。
import os.path
# 從路徑中獲取目錄
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"目錄: {directory}")
路徑合併
如果你有一個單獨的目錄和一個單獨的檔名,你可以得到該檔案的完整路徑。
import os.path
# 路徑合併
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"完整路徑: {full_path}")
6.5 平台無關的路徑
處理路徑時要注意作業系統之間的差異。路徑分隔符可能不同,這意味著在一個平台上工作的程式碼可能在另一個平台上不起作用。為了避免在不同作業系統之間移植程式碼時出問題,使用 os.path.join(),os.path.abspath() 和 os.path.dirname() 這些函數,這些確保了跨平台兼容性。
例如:
import os
# 平台無關地合併路徑
directory = 'some_directory'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"完整路徑: {full_path}")
獲取絕對路徑
如果你只有一個相對於當前工作目錄的路徑,但你想將其轉換為絕對路徑,有一個 函數 abspath()。
import os.path
# 獲取絕對路徑
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"絕對路徑: {absolute_path}")
重要! 永遠在處理路徑時使用系統函數,因為你的程式碼可能會在使用不同檔案分隔符的作業系統上運行,比如,不是 \,而是 /,或者那些禁止使用 «:» 在路徑中的系統,或者其他。
GO TO FULL VERSION