1. 程式人生 > >python基本操作-檔案、目錄及路徑

python基本操作-檔案、目錄及路徑

[toc] > 使用python的os模組,簡單方便完成對資料夾、檔案及路徑的管理與訪問操作。 ## 1 前言 在最近開發中,經常需要對檔案進行讀取、遍歷、修改等操作,想要快速、簡單的完成這些操作,我選擇用 python 。通過 python 的標準內建 os 模組,只需要幾行程式碼,即可完成想要的操作。經過對 os 的使用,本文把 os 模組的常用的操作進行總結,主要分為以下幾個劃分: - 資料夾操作:即資料夾的建立、修改(改名/移動),查詢(檢視、遍歷)、刪除等。 - 檔案操作:即檔案的建立、修改、讀取、刪除等。 - (資料夾/檔案)路徑操作:即資料夾或檔案的路徑操作,如絕對路徑,檔名與路徑分割,副檔名分割等 本文涉及常用 的 os 函式的使用展示,主要使用 python 互動模式下進行程式碼說明。後續操作預設已經引入 os 模組,如下: ```python import os ``` ## 2 資料夾操作 以本地 `E://pythontest` 目錄作為演示目錄,此目錄下當前檔案如下: ```shell test │ test.txt └─test-1 test-1.txt ``` `test` 及 `test-1` 是資料夾,`test.txt` 及 `test-1.txt` 是檔案。 ### 2.1 查詢操作 熟悉 linux 同學應該對 `ls` / `pwd` / `cd` 等操作不陌生,對應的 python 也有對應的方法,主要包括: - listdir : 檔案及目錄列表 - getcwd :獲取當前目錄 - chdir :更換目錄 - stat :檔案及目錄基本資訊 - walk :遞迴遍歷目錄 ```python >>> os.chdir("E://pythontest") # 更改目錄 >>> os.getcwd() # 獲取當前目錄 'E:\\pythontest' >>> os.listdir("test") # 檔案及目錄列表,相對路徑 ['test-1', 'test.txt'] >>> os.listdir("E://pythontest/test") # 檔案及目錄列表,絕對路徑 ['test-1', 'test.txt'] >>> os.stat("test") # 獲取目錄資訊 os.stat_result(st_mode=16895, st_ino=4503599627377599, st_dev=266147611, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1590833033, st_mtime=1590832647, st_ctime=1590832207) >>> os.stat("test/test.txt") # 獲取檔案資訊 os.stat_result(st_mode=33206, st_ino=2251799813692354, st_dev=266147611, st_nlink=1, st_uid=0, st_gid=0, st_size=4, st_atime=1590832653, st_mtime=1590832609, st_ctime=1590832598) ``` 其中 stat 函式返回的是檔案或者目錄的基本資訊,具體如下: - **st_mode:** inode 保護模式 - **st_ino:** inode 節點號。 - **st_dev:** inode 駐留的裝置。 - **st_nlink:** inode 的連結數。 - **st_uid:** 所有者的使用者ID。 - **st_gid:** 所有者的組ID。 - **st_size:** 普通檔案以位元組為單位的大小 - **st_atime:** 上次訪問的時間。 - **st_mtime:** 最後一次修改的時間。 - **st_ctime:** 建立時間。 日常使用中,我們一般使用 st_size 、st_ctime 及 st_mtime 獲取檔案大小,建立時間,修改時間。另外,我們看到輸出的時間是秒數,在這裡提一下,關於日期的轉換處理。 (1)秒數轉日期時間格式字串 ```python >>> import time # 引入time模組 >>> timestruct = time.localtime(1590803070) # 轉換為時間結構體 >>> print(timestruct) time.struct_time(tm_year=2020, tm_mon=5, tm_mday=30, tm_hour=9, tm_min=44, tm_sec=30, tm_wday=5, tm_yday=151, tm_isdst=0) >>> time.strftime("%Y-%m-%d %H:%M:%S",timestruct) # 格式化時間 '2020-05-30 09:44:30' ``` (2)格式日期時間字串轉秒數 ```python >>> import datetime # 引入datetime模組 >>> timeobject = datetime.datetime.strptime("2020-05-23 10:00:00","%Y-%m-%d %H:%M:%S") #解析時間字串為時間物件 >>> timeseconds=time.mktime(timeobject.timetuple()) # 獲取時間秒數 >>> print(int(timeseconds)) # 轉為int顯示 1590199200 ``` - 遍歷操作 walk 函式對目錄進行遞迴遍歷,返回 root,dirs,files,分別對應當前的遍歷的目錄,此目錄中的子目錄及檔案。 ```python >>> data = os.walk("test") # 遍歷test目錄 >>> for root,dirs,files in data: # 遞迴遍歷及輸出 ... print("root:%s" % root) ... for dir in dirs: ... print(os.path.join(root,dir)) ... for file in files: ... print(os.path.join(root,file)) ... root:test test\test-1 test\test-2 test\test.txt root:test\test-1 test\test-1\test-1.txt root:test\test-2 test\test-2\test-2.txt ``` ### 2.2 建立操作 - mkdir :新建單個目錄,若目錄路徑中父目錄不存在,則建立失敗 - makedirs :新建多個目錄,若目錄路徑中父目錄不存在,則自動建立 ```python >>> os.mkdir("test") >>> os.mkdir("test1/test1-1") # 父目錄不存在,報錯 Traceback (most recent call last):