檔案和目錄相關工具

2022-09-13 14:39:10 字數 3788 閱讀 1267

該部分主要包含檔案和目錄相關工具,裡面包含迭代、上下文管理、以及檔案物件對unicode編碼的支援。

open

python內建函式,用來在計算機底層系統下訪問檔案的主要工具。

基本功能

(1)被呼叫時將返回乙個新的與外部相連的檔案物件。

(2)具備檔案雙向傳輸資料的方法,及執行多種檔案相關操作。

(3)為底層檔案系統提供了可移植介面,可在多種平台上正常執行。

檔案物件模型

文字檔案

(1)內容包含unicode文字序列

(2)檔案進行雙向傳輸時,自動按照預設的編碼進行轉換,換行符自動轉換

(3)建立檔案時使用那個str物件

二進位制檔案

(1)內容包含bytes序列

(2)檔案進行雙向傳輸時,不進行任何轉換

(3)建立物件時使用bytes物件

使用內建檔案物件

read,readline     #讀取資料,注意開啟檔案的模式

write,writelines   #寫入資料,writelines列表物件輸入

close        #釋放系統資源,可使用with環境語句

seek         #移動到檔案的任意位置

flush         #快取區資料重新整理到磁碟

fileno        #獲取底層檔案控制代碼

使用檔案迭代器讀取行

檔案物件包含乙個智慧型的迭代器,能夠在for迴圈和列表解析等所有迭代環境下,在每次請求的情況下返回一行。

其他開啟選項

檔名檔案路徑可以是乙個絕對路徑或相對於當前目錄的路徑

開啟模式

r+,w+,a+ #文字模式下讀寫

rb,wb #二進位制模式下讀寫

快取策略

指定緩衝策略,以便提高效能,因為linux以page頁為單位,可設定open的buffer緩衝區大小減少系統io呼叫。

文字檔案的unicode編碼

文字檔案內容

在檔案內部是編碼之後的形式,記憶體中則是解碼(unicode序列)之後的形式。

文字檔案的換行符轉換

文字模式 \r\n --> \n

文字模式 \n --> \r\n

二進位制模式 不發生轉換,二進位制模式可以避免unicode錯誤,同時也自動禁用了換行符轉換。

python2.x和python3.x的一些區別

python2.x中檔案會存在bytes和unicode兩種型別的資料,讀取時需要注意開啟檔案的模式。

python3.x中檔案只存在bytes一種資料型別,讀取時可採用二進位制通用的讀取方法。

用struct打包二進位制資料

可用於打包和解壓二進位制資料,二進位制資料的內容相對來說內容比較豐富,會包含各種資料型別,如整數,浮點數,字元等。

用途:

如果需要使用一些持久化的資料結構檔案來進行程式之間通訊的話,struct會是一種比較好的選擇,通常程式之間可採用xml這種文字格式來儲存交換資料,

又或者採用json這種通用的序列化工具,相對來說struct在一些簡單的應用場景中,會顯得比較簡單高效些。

讀取和儲存

讀取:採用二進位制讀取位元組字串

儲存:採用二進位制的方式儲存位元組串

示例

import struct

file = open('data.bin', 'rb')

bytes = file.read()

values = struct.unpack('>i4shf', data)

values[3:4]

struct.unpack('>h', values)

二進位制檔案的隨機訪問

1、二進位制檔案也可以進行常見的隨機訪問處理操作,使用seek移動到檔案的任意內部位置。

2、seek支援基於位元組偏移的隨機訪問

3、文字模式下不同的編碼,會導致使用seek比較困難,這會涉及文字內容編譯碼和換行符轉換問題從而導致錯誤。當檔案資料中存在unicode和非unicode

資料共存的時候,通過seek操作之後,可能導致後續的read操作出現異常,如定位到unicode編碼位元組的中間位元組上,從而導致解碼錯誤。

os模組中的底層檔案工具

os呼叫是通過檔案描述符來處理檔案,基於檔案描述符的檔案以原始位元組形式進行處理。

os.open的使用

file = open('file_path', ''r)

file.fileno()   #獲取檔案描述符

os.open的模式識別符號

os模組讓指令碼執行有更加精細的控制

把描述符封裝進檔案物件

利用os.fdopen()函式傳入檔案描述符引數,繼而操作檔案。

其他os檔案模組工具

重新命名檔案

刪除檔案

修改檔案許可權

....

檔案掃瞄器  

可利用檔案物件的read等一系列方法來逐行讀取檔案內容,同時也可以利用for,map等迭代工具來掃瞄檔案。

def scanner():

list(map(function, open(name, 'r')))

#[ function(line) for line in open(name, 'r') ]

檔案過濾器

def filter_files(name, function):

with open(name, 'r') as input, open(name + '.out', 'w') as output:

for line in input:

output.write(function(line))

遍歷目錄

用os.popen執行shell命令

#非迭代器用法,阻塞式

os.popen('dir /b').readlines()

#迭代器用法,非阻塞式,逐行進行讀取輸出

for line in os.popen('dir /b'):

print(line[:-1])

glob模組

該呼叫沒有涉及派生shell命令,可用於在多個目錄下收集匹配名稱。      

遍歷目錄樹

可以通過編寫遞迴程式來遍歷目錄樹,也可以使用os模組內建的工具,如os.walk。

遞迴

有條件的不斷執行自我巢狀的函式,表徵為:

(1)包含判斷邏輯

(2)包含迴圈處理邏輯

python3.x中處理檔名

通過os.listdir,os.walk等模組生成的都是unicode字串,那麼這可能會遇到解碼錯誤的問題,這時候可以

選擇將os.listdir以bytes引數的方式指定執行,那麼函式將以編碼好的直接字串形式返回檔名。

unicode策略:檔名和檔案內容

與檔案相關的unicode概念有兩種完全不同的形式,檔案內容編碼和檔名編碼。

檔案內容編碼取決於python直譯器環境的設定,檔名編碼取決於系統環境的設定。

sys.getdefaultencoding() #檔案

sys.getfilesystemencoding() #檔名

重點小結:

1、不同型別檔案的開啟模式

2、檔案編譯碼

3、struct模組的用法,打包和處理二進位制檔案的資料。

檔案和目錄相關命令

1.檢視目錄內容ls 技巧 自動補全 tab鍵 敲出前幾個字母後,提示可能存在的命令 雙擊tab鍵 用過的命令 上下游標 退出選擇 ctrl c 特點 以.開頭的檔案為隱藏檔案,需要 a才能顯示 表示當前目錄 表示上一級目錄 ls選項 a 顯示隱藏檔案 l 以列表方式顯示詳細資訊 h 人性化詳細資訊...

linux 檔案和目錄相關命令

cd 返回上次所在目錄 ls l 列出檔案的詳細資訊 ls a 列出檔案下所有的檔案,包括以 開頭的隱藏檔案 mkdir p.dir1 dir2 遞迴的建立目錄 mkdir dir 同時建立多個目錄 rm r 遞迴刪除 rm f 強制刪除不提示 r 複製目錄 a 複製檔案的所有屬性 歸檔複製,常用於...

linux檔案目錄相關命令

1.tree 檢視目錄的內容 用法 tree 檢視當前目錄 tree dir 檢視指定目錄 linux預設沒有安裝tree,需手動安裝 sudo apt get install tree 2.ls 檢視檔案或目錄 用法 ls 引數 可不加 引數 a 顯示所有檔案 隱藏檔案 檔案或目錄名前邊有乙個點 ...