《瘋狂Python講義》之檔案IO

2021-10-02 07:05:49 字數 4438 閱讀 2059

pathlib模組提供了一組物件導向的類,這些類可代表各種作業系統上的路徑,程式可通過這些類操作路徑。

程式在建立purepath和path時,即可傳入單個路徑字串,也可以傳入多個路徑字串,purepath會將它們拼接成乙個字串。

pp= pureposixpath ( 』 crazyit 』,』some/path 』,』info 』 ) 

#看到輸出 unix 風格的路徑

print(pp) # crazyit/ some/path/info

如果在建立purepath不傳入任何引數,系統預設建立代表當前路徑的purepath

#如果不傳入引數,預設使用當前路徑

pp = pure path ()

print(pp) #.

如果在建立purrepath時傳入的引數包含多個根路徑,則只有最後乙個根路徑及後面的子路徑生效

#如果傳入的引數包含多個根路徑 ,則只有最後乙個根路徑及後面的子路徑生效

pp= pureposixpath ('/etc''/usr','lib64')

print(pp) # / usr/ lib64

pp = purew ndowspath ( 'c: /windows','d:info' )

print (pp) # d : info

如果在建立purepath時傳入的路徑字串有多個斜槓和點號,系統會直接忽略它們,但不會忽略兩點,因為兩點在路徑中有實際意義

#在路徑字串中多出來的斜槓和點號(代表當前路徑)都會被忽略

pp= purepath ('foo//bar')

print(pp) # foo\ bar

pp= purepath ('foo/./bar')

print(pp) # foo\bar

purepath物件支援各種比較運算子,既可比較是否相等,也可比較大小—實際上就是比較它們的路徑字串

purepath提供了不少屬性和方法,這些屬性和方法主要還是用於操作路徑字串:

path是purepath的子類,它除支援purepath的各種操作、屬性和方法之外,還會真正訪問底層的檔案系統,包括判斷path對應的路徑是否存在,獲取path對應路徑的各種屬性,甚至可以對檔案進行讀寫。

path提供了兩個子類:posixpath和windowspath,前者代表unix風格的路徑,後者代表windows風格的路徑。

在os.path模組下提供了一些操作目錄的方法:

fnmatch匹配支援如下萬用字元:

python提供了乙個內建的open()函式,用於開啟指定檔案,該函式的語法格式如下:

open(file_name [,access_mode][,buffering])
開啟檔案之後,就可呼叫檔案物件的屬性和方法:

模式意義

r唯讀模式

w寫模式

a追加模式

+讀寫模式

b二進位制模式,可與其他模式結合使用

如果使用r或r+模式開啟檔案,則要求被開啟的檔案本身是存在的,r或r+模式不能建立檔案;如果使用w、w+、a、a+模式開啟檔案,則檔案可以不存在,open()函式會自動建立新檔案;b模式可被追加到其他模式上,用於代表以二進位制的方式來讀寫檔案內容

python既可使用檔案物件的方法來讀取檔案,也可使用其他模組的函式來讀取檔案

檔案物件提供了read()方法來按位元組或字元讀取檔案內容,到底是讀取位元組還是字元,則取決於是否使用了b模式,如果使用了b模式,則每次讀取乙個位元組;如果沒有使用b模式,則每次讀取乙個字元。在呼叫該方法時可傳入乙個整數作為引數,用於指定最多讀取多少個位元組或字元。

如果要讀取的檔案所使用的字符集和當前作業系統的字符集不匹配,則有兩種解決方式:

# 指定使用二進位制方式讀取檔案內容

f = open("read_test3.py", 'rb', true)

# 直接讀取全部檔案,並呼叫bytes的decode將位元組內容恢復成字串

print(f.read().decode('utf-8'))

f.close()

如果程式要讀取行,通常只能用文字方式來讀取,檔案物件提供了如下兩個方法來讀取行:

import codecs

# 指定使用utf-8字符集讀取檔案內容

f = codecs.open("readline_test.py", 'r', 'utf-8', buffering=true)

while true:

# 每次讀取一行

line = f.readline()

# 如果沒有讀到資料,跳出迴圈

if not line: break

# 輸出line

print(line, end='')

f.close()

程式使用readlines()方法一次讀取檔案內所有行,**如下:

import codecs

# 指定使用utf-8字符集讀取檔案內容

f = codecs.open("readlines_test.py", 'r', 'utf-8', buffering=true)

# 使用readlines()讀取所有行,返回所有行組成的列表

for l in f.readlines():

print(l, end='')

f.close()

fileinput模組提供了如下函式可以把多個輸入流合併在一起:

檔案物件本身就是可變數的,因此程式完全可以使用for迴圈來遍歷檔案內容。

import codecs

# 指定使用utf-8字符集讀取檔案內容

f = codecs.open("for_file.py", 'r', 'utf-8', buffering=true)

# 使用for迴圈遍歷檔案物件

for line in f:

print(line, end='')

f.close()

# 將檔案物件轉換為list列表

print(list(codecs.open("for_file.py", 'r', 'utf-8', buffering=true)))

sys.stdin也是乙個類檔案物件,程式同樣可以使用for迴圈遍歷sys.stdin,意味著程式可以通過for迴圈來獲取使用者的鍵盤輸入。

import sys

# 使用for迴圈遍歷標準輸入

for line in sys.stdin:

print('使用者輸入:', line, end='')

cmd1 | cmd2 | cmd3 ...
上面語法的作用是:cmd1命令的輸出,將會傳給cmd2命令作為輸入;cmd2命令的輸入,又會傳給cmd3命令作為輸出。

python提供了with語句來管理資源關閉。比如可以把開啟的檔案放在with語句中,這樣with語句就會幫我們自動關閉檔案。

with語句的語法格式如下:

with context_expression[as target(s)]:

with **塊

import codecs

# 使用with語句開啟檔案,該語句會負責關閉檔案

with codecs.open("readlines_test.py", 'r', 'utf-8', buffering=true) as f:

for line in f:

print(line, end='')

linecache模組允許從python原始檔中隨機讀取指定行,並在內部使用快取優化儲存,它會用utf-8字符集來讀取文字檔案。實際上只要該檔案使用utf-8字符集儲存,就可以用linecache模組讀取。

如果以r+、w、w+、a、a+模式開啟檔案,則都可以寫入。其中,當以r+、w、w+模式開啟檔案時,檔案指標位於檔案開頭處;當以a、a+模式開啟檔案時,檔案指標位於檔案結尾處;當以w或w+模式開啟檔案時,程式會立即清空檔案的內容。

檔案指標用於標明檔案讀寫的位置。檔案物件提供了以下方法來操作檔案指標:

檔案物件提供的寫檔案的方法主要有兩個:

os.chmod(path,mode):更改許可權

os.chown(path,uid,gid):更改檔案的所有者

os.fchmod(fd,mode):改變乙個檔案的訪問許可權

os.fchown(fd,uid,gid):改變檔案的所有者

os.read(fd,n):從檔案描述符fd中讀取最多n個位元組,返回讀到的位元組串

os.write(fd,str):將位元組串寫入檔案描述符fd中,返回實際寫入的位元組串長度

os.close(fd):關閉檔案描述符fd

os.lseek(fd,pos,how):該函式同樣用於移動檔案指標。

《瘋狂Python講義》之異常處理

異常機制已經成為衡量一門程式語言是否成熟的標準之一,使用異常處理機制的python程式有更好的容錯性,更加健康。python的異常處理機制可以讓程式具有極好的容錯性。使用try except捕獲異常 語法結構如下 try 業務實現 except error1,error2,as e alert 輸入...

《瘋狂Python講義》之函式和lambda表示式

函式就是python程式的重要組成單位,乙個python程式可以由很多個函式組成。定義函式和呼叫函式 定義函式的語法格式如下 def 函式名 形參列表 由0條到多條可執行語句組成的函式 return 返回值 如果程式需要有多個返回值,既可將多個值包裝成列表之後返回,也可直接返回多個值。如果pytho...

瘋狂ios講義之瘋狂連連看遊戲簡介

連連看 是一款廣受玩家歡迎的小遊戲,它具有玩法簡單 耗時少等特徵,尤其適合廣大白領女性在辦公室裡休閒娛樂。圖13.1顯示了該遊戲的遊戲介面。從圖13.1可以看出,在 連連看 的遊戲介面中,平均分布著2n張,每張都會出現偶數次,遊戲玩家要做的事情就是依次找出兩張相同的,如果這兩張之間只用橫線或豎線相連...