1. 程式人生 > >chapter6.2、stringIO 、 bytesIO和路徑操作

chapter6.2、stringIO 、 bytesIO和路徑操作

錯誤 語法錯誤 false stdin 創建 linux buffer none 家目錄

一、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(basd)
p.read_bytes()
p = Path(./test_test.txt)
p.write_text(absd)
p.read_text()

chapter6.2、stringIO 、 bytesIO和路徑操作