目錄管理(os)
-
system:執行系統命令
# 執行系統命令 os.system('cls')
-
name:獲取操作系統名稱
# 操作系統名稱,nt代表Windows, posix代表類unix print(os.name)
-
environ
# 獲取環境變量 env = os.environ print(env['path']) print(env.get('path')) print(env.get('HELLO'))
-
getcwd:# 獲取當前工作目錄
print(os.getcwd())
-
mkdir:創建目錄
# 創建目錄,只能是單層目錄 # os.mkdir('hello') # 這里會失敗 # os.mkdir('a/b/c')
-
makedirs:創建目錄,會創建中間目錄
# 會創建中間目錄 # os.makedirs('a/b/c')
-
rmdir:刪除目錄,只能刪除空目錄
# 刪除目錄,只能刪除空目錄 # os.rmdir('hello') # 當目錄中有其他文件或目錄時刪除失敗 # os.rmdir('a')
-
rename:修改文件名(可以是目錄)
# 修改名字,可以是目錄 (old, new) # os.rename('a', 'c') # 也可以修改文件名 # os.rename('test.py', '123.py')
-
stat:查看文件信息
# 查看文件信息 print(os.stat('123.py'))
-
listdir:列出直接子文件
# 列出直接子文件 print(os.listdir('c'))
-
相對目錄、絕對目錄
相對目錄:就是有參考的目錄
. 表示當前目錄,通常 ./ 可以省略
.. 表示上一級目錄
絕對目錄:windows中以某個盤符開頭,類unix系統中以'/'開頭的目錄
目錄分隔符:
類unix:/
windows:/ 或 \
建議:統一使用 '/' 表示
說明:在文件操作時,使用相對目錄和絕對目錄都可以 -
path
from os import path # 拼接目錄 print(path.join('abc/def', '123.py')) # 提取文件后綴(切割文件名與后綴) name, ext = path.splitext('789.py') print(name, ext) # 提取目錄名(最后一個目錄分隔符的前面內容) print(path.dirname('123/456/789.py')) # 提取文件名(包括后綴) print(path.basename('123/456/789.py')) # 切割文件名和目錄 print(path.split('123/456/789.py')) # 判斷文件是否存在(可以是目錄) print(path.exists('123.py')) # 判斷是否是目錄文件 print(path.isdir('c')) # 判斷是否是普通文件 print(path.isfile('123.py')) # 獲取普通文件大小 print(path.getsize('01-os.py')) # 不可以獲取目錄大小,始終是0 print(path.getsize('c'))
練習:自己實現目錄大小的統計,需要使用遞歸
文件管理
-
打開文件(open)
-
示例:
fp = open('00-test.txt', 'r')
-
參數:
參數1:文件路徑名
參數2:打開方式
參數3:編碼格式,通常可以不指定,系統會自動識別處理-
打開方式:
r:只讀方式,文件不存在會報錯
w:只寫方式,文件不存在創建文件,文件存在清空內容
a:追加方式,文件不存在則創建,文件存在直接打開(不會清空內容),只能向最后追加內容
r+:在r方式下添加寫的功能
w+:在w方式下添加讀的功能
a+:在a方式下添加讀的功能
在上面的模式上添加b,表示二進制方式打開:rb、wb、ab、rb+、wb+、ab+
1.文件的讀寫數據全部是bytes類型,沒有添加b的方式全部是str類型-
編碼方式:
ascii:美國信息交換標准代碼
ansi:擴展的ascii
gb2312:中國的ansi
gbk:擴展的gb2312
unicode:是一套理論,實現方式不限
utf-8:可變長度的unicode實現,對中文的支持比較友好 -
-
關閉文件(close)
# 關閉文件 fp.close()
-
文件讀寫
# 讀取指定長度內容 # ret = fp.read(3) # 寫入內容 fp.write('hello') # 讀取一行,包括換行符 # print(fp.readline()) # 讀取所有行,返回一個列表 print(fp.readlines()) # 是否可讀 print(fp.readable()) # 是否可寫 print(fp.writable())
-
文件指針
# 返回文件指針的操作位置 print(fp.tell()) # 設置偏移 # 參數1:偏移量 # 參數2:參考位置,0:開頭,1:當前,2:末尾 # 定位到末尾 fp.seek(0, 2)
帶b的方式seek沒有異常;不帶b的時候,相對於當前位置無法偏移,相對於末尾只能偏移0
-
文件刪除
import os os.remove('02-test.py')
練習:(遞歸)刪除一個目錄
練習
-
1.實現一個拷貝文件的功能,提醒:要考慮超大文件問題,如:依次讀取1024字節,循環讀取
-
2.遞歸刪除一個文件夾
-
3.統計一個文件夾的大小
-
4.拷貝一個文件夾
-
5.移動一個文件夾
-
6.目錄整理
-
一個目錄中有各種文件,也有文件夾
-
將所有的文件夾統一放到dir目錄下
-
將沒有后綴的文件統一放到others目錄下
-
將有后綴的文件放到后綴名大寫的文件夾下
# 處理前
test/
dir1/
dir2/
1.py
2.py
3.txt
4.pdf
123
456
# 處理后
test/
DIR/
dir1/
dir2/
PY/
1.py
2.py
TXT/
3.txt
PDF/
4.pdf
OTHERS/
123
456友情提醒:中間使用的所有文件目錄的判斷都需要進行拼接。
-