python基本操作-檔案、目錄及路徑
阿新 • • 發佈:2020-05-31
[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):