路徑操作&StringIO/BytesIO
路徑操作
- 路徑操作模塊:
- 3.4版本以前os.path模塊
- 3.4版本開始,建議使用pathlib模塊,提供Path對象來操作。包括目錄和文件
- pathlib模塊:
- 路徑拼接和分解
- 操作符/
- Path對象/Path對象
- Path對象/字符串或者字符串/Path對象?
- 分解:
- parts屬性,可以返回路徑中的每一個部分
- joinpath:
- joinpath(*other)連接多個字符串到Path對象中
- 獲取路徑
- str獲取路徑字符串
- bytes獲取路徑字符串的bytes
- 父目錄
- parent目錄的邏輯父目錄
- parents父目錄序列,索引0是直接父目錄
- name目錄的最后一個部分
- suffix目錄中最后一個部分的擴展名
- stem目錄最后一個部分,沒有后綴
- suffixes返回多個擴展名列表
- with_suffix(suffix)補充擴展名到路徑尾部,返回新的路徑,擴展名存在則無效
- with_name(name)替換目錄后最后一個部分并返回一個新的路徑
- cwd()返回當前工作目錄
- home()返回當前家目錄
- is_dir()是否是目錄
- is_file()是否是普通文件
- is_symlink()是否是軟連接
- is_socket()是否是socket文件
- is_block_device()是否是塊設備
- is_char_device()是否是字符設備
- is_absolute()是否是絕對路徑
- resolve()返回一個新路徑,這個新路徑就是當前Path對象的絕對路徑,如果軟鏈接直接被解析
- absolute()也可以獲取絕對路徑,但是推薦使用resolve()
- exists()目錄或文件是否存在
- rmdir()刪除空目錄,沒有提供判斷目錄為空的方法
- touch(mode=0o666,exist_ok=Ture)創建一個文件
- as_uri()將路徑返回成URI,例如‘file:///etc/passwd’
- mkdir(mode=0o777,parents=False,exist_ok=False)#parents是否創建父目錄,True等同于mkdir -p;父目錄不存在,則拋出FileNotFoundError。exist_ok在3.5加入,False時路徑存在拋出FileExistsError;True時,FileExistsError被忽略
- iterdir()迭代當前目錄
- glob(pattern)通配符給定模式
- rglob(pattern)通配符給定模式,遞歸目錄
- match(pattern)匹配模式,成功返回True
- open(mode=’r’,buffering=-1,encoding=None,errors=None,newline=None)
- 使用方法類似于內建函數open。返回一個文件對象
- 3.5增加新函數:
- read_bytes():以rb讀取路徑對應文件,并返回二進制流,看源碼
- read_text(encoding=None,errors=None):以rt方式讀取路徑對應文件,返回文本
- Path.write_bytes(data):以wb方式寫入數據到路徑對應文件
- write_text(date,encoding=None,errors=None):以wt方式寫入字符串到路徑對應文件
StringIO
- io模塊中的類:from io import StringIO
- 內存中,開辟的一個文本模式buffer,可以像文件對象一樣操作它
- 當close方法被調用的時候,這個buffer會被釋放
- getvalue()獲取全部去內容,跟文件指針沒有關系
- 好處:一般來說,磁盤的操作比內存操作要慢的多,內存足夠的時候一般的優化思路是少落地,減少磁盤IO的過程,可以大大提高程序的運行效率
- io模塊中的類 from io import BytesIO
- 內存中,開辟的一個二進制模式的buffer,可以像文件對象一樣操作它
- 當close方法被調用的時候,這個buffer會被釋放。同上例
- file-like對象:類文件對象,可以像文件對象一樣操作
- socket對象,輸入輸出對象(stdin、stdout)都是類文件對象
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88166