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張,每張都會出現偶數次,遊戲玩家要做的事情就是依次找出兩張相同的,如果這兩張之間只用橫線或豎線相連...