chapter6.2、stringIO 、 bytesIO和路徑操作
一、stringIO 和 bytesIO
stringIO
類文件對象,在內存中開辟一個文本模式的buffer,可以像文件一樣操作
臨時緩沖,不寫入磁盤,close時關閉消失
tio.getvalue() 讀取內容,不受指針影響,其他與文件操作相同
文件系統中沒有相應的文件對象,沒有fileno()
bytesIO
from io import BytesIO
與string的操作相同,在內存中開辟一個二進制模式的buffer,可以像文件對象一樣操作
內存中的流,字符流和字節流,接口相同
可以使用with,文件對象和類文件對象你都支持上下文管理
磁盤操作慢於內存操作,內存足夠時,優化思路是少落地,減少磁盤IO的過程,可以大大提高程序運
行效率
磁盤的緩存也可以使用,但不穩定,寫入最好批量操作
file-like對象 ,類文件對象,操作接口統一
from sys impoort stdout ,stderr ,stdin
標準錯誤輸出,在標準錯誤輸出上輸出顏色改變的字符串
標準輸入,標準輸出和標準錯誤輸出都是類文件對象
二、路徑操作
文件系統就是路徑加文件本身
linux文件系統就是一顆目錄樹,一切皆文件,目錄也是文件
Windows文件系統是分盤符的,
os.path 3.4之前使用os模塊下的path方法
windows 的路徑分割符默認是\\ 盤符是O:/, linux下默認是 /,最左邊的 / 都是根
操作的類型是字符串,Linux下path.exists(), 來判斷文件是否存在
abspath
dirname,文件目錄,當前文件可以是目錄
basename
path.spllitdrive
from os import path
3.4以後使用
pathlib,提供path對象來操作,包括目錄和文件
from pathlib import Path
path() Winfows下===》WindowsPath(‘.‘),Linux下PosixPath(‘.‘)
p.absolute() 絕對路徑.
p / ‘c‘ 此處 / 為運算符重載,結合為一個路徑,字符串相除報語法錯誤,‘a‘/‘b‘,可以用括號包裝起來
p.parts 分解成元組,拆分路徑,返回路徑中的每個部分
joinpath 連接多個字符串到path對象中
str(p)獲取路徑字符串 bytes(p)獲取路徑字符串的bytes
路徑中的\註意轉義
p.parent 父路經,目錄的邏輯父目錄
p.parents 祖先路徑,可叠代對象,可以獲得所有的父路徑,索引0是直接的父
目錄組成部分
p2.name 指basename ,
p2.stem 不帶類型的最後一個文件名,
p2.suffix 最後一個文件的後綴,
p2.suffixes多級擴展名列表
p2.with_name,名稱替換 ,替換路徑基名,並返回一個新的路徑
p2.with_suffix() 替換擴展名,有則替換,無則補充擴展名。
p.cwd() 類上的對象可以直接調用類的某些操作方法,返回當前工作目錄
p.home()返回家目錄
判斷方法
p.is_dir() 不存在判斷都是False,存在返回True
p.is_file() 判斷是否普通文件,存在返回True
p.is_symlink() 是否軟鏈接
p.is_socket() 文件
p.is_block_device() 是否塊設備
p.is_absolute() 是否直接路徑,軟連接,不解析
p.resolve() 返回新路徑,就是當前path對象的絕對路徑,如果是軟連接,解析它
p.absolute() 獲取絕對路徑
p.exists() 目錄或文件是否存在
rmdir() 刪除空目錄,有文件,不刪,慎用刪除
touch(mode=0o666,exist_ok=True) :
path(‘O:/test‘).touch()
touch的·參數exist_ok ,是否覆蓋,存在也覆蓋,會壓制異常;touch改變文件atime
p.as_uri() 將路徑返回成URI,例如"file:///etc/passwd"
p.mkdir(mode=0o777,parents=False,exist_ok=False),
parents,是否創建父目錄:True等同於mkdir -p ,False時,父目錄不存在拋異常FileNotFoundError
exist_ok 參數,Fasle時,路徑存在,拋FileExistsError,True時,壓制異常,忽略
叠代
iterdir,叠代目錄,遍歷目錄所有內容,不遞歸,顯示隱藏文件
通配符
glob(pattern) 通配給定的模式
rglob(pattern) 通配給定的模式,遞歸尋找
都返回 生成器對象
glob(‘*/*log‘) */下一層,; *.log *通配;**/下任意層尋找,相當於rglob
match(pattern)模式匹配成功返回True
stat() 相當於stat ,文件狀態信息,跟蹤軟連接到文件本身
lstat 對符號鏈接只看連接文件本身的文件信息
文件操作
路徑打開
Path.open(self, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None)
方法與內建函數open類似,返回一個文件對象
p.write源代碼中使用with,調用不用關文件
Path.read_text(encoding=None,errors=None)
Path.read_bytes :rb讀取路徑對應文件,
from pathlib import Path p = Path(‘./test_binary.txt‘) p.write_bytes(b‘asd‘) p.read_bytes()
p = Path(‘./test_test.txt‘) p.write_text(‘absd‘) p.read_text()
chapter6.2、stringIO 、 bytesIO和路徑操作