Python學習筆記 第十一章 檔案和流

2021-09-27 11:20:16 字數 2739 閱讀 5867

open(name[, mode[, buffering]])
open函式預設的開啟方式為讀模式。

open中模式引數的常用值值描述

'r'讀模式

'w'寫模式

'a'追加模式

'b'二進位制模式(可以新增到其他模式中使用)

'+'讀/寫模式(可以新增到其他模式中使用)

將檔案以二進位制形式開啟,這個只有在python進行換行符轉換的平台上才需要,如windows、mac

通過在模式引數中使用u引數能夠在開啟檔案時使用通用的換行符支援模式,在這種模式下,所有的換行符/字串(\r\n、\r或者是\n)都被換成\n,而不用考慮執行的平台。

open函式的第3個引數控制著檔案的緩衝具體如下:

0(false):無緩衝

1(true):有緩衝

>1:代表緩衝區的大小

-1:代表使用預設緩衝區的大小

類檔案物件是支援一些file類方法的物件,最重要的是支援read方法或者write方法,或兩者都支援。

三種標準的流

sys.stdin、sys.stdout、sys.stderr

f.write()、f.read()

每次呼叫f.write方法時,所提供的引數string會被追加到檔案中已存在的部分後面。

unix的shell(就像gnu bash)中,使用管道可以在乙個命令後面續寫其他多個命令,就像下面這個例子(假設是gnu bash)

cat somefile.txt | python somescript.py | sort
gnu bash 在windows中也是存在的。上面有更多資訊。在mac os x中,是通過terminal程式,可以使用shell檔案。

隨機訪問

前文介紹的讀寫都是按照從頭到尾的順序讀寫資料,事實上可以通過seek和tell來直接訪問感興趣的部分(隨機訪問)

seek(offset[, whence]):把當前位置移動到offset和whence定義的位置,其中offset表示偏移量。whence預設是0:表示偏移量從頭計算,為1:表示從當前位置計算,為2:表示從檔案末尾移動。

tell方法返回當前檔案的位置。

readline([num]):num非負,表示readline最多讀寫的字元數。

readlines():讀出檔案中的所有行,並以行列表的形式返回。

writelines():和readlines正好相反。

沒有writeline方法,只能使用write

開啟檔案後,在沒有往檔案中寫入內容或者不著急從記憶體中把內容寫入硬碟的情況下,理論上可以不顯式關閉檔案(通常,乙個檔案在退出程式後(前)自動關閉),但關閉檔案可以避免作業系統或設定中進行無用的修改,這樣做也會避免用完系統中所開啟檔案的配額。

with語句可以開啟檔案並將其賦值到變數上。之後可以將資料寫入語句體中的檔案。檔案語句結束後會被自動關閉,即使是由於異常引起的結束也是如此。

在python2.5中with語句只有在匯入如下模組才能使用:

from __future__ import with_statement
而2.5以後的版本中,with語句可以直接使用。

如果需要繼續使用檔案,但又想及時將內容寫入硬碟,就需要呼叫檔案物件的flush方法。

上下文管理器

with語句可用作上下文管理器,進入with語句塊時__enter __方法(無引數)被呼叫,返回值繫結到as之後的變數,離開with語句塊時__exit __ 方法被呼叫(異常型別、異常物件和異常回溯三個引數),如果__exit __方法返回false,那麼所有異常都不會被處理。

檔案也可以作為上下文管理器。它們的__enter __方法返回檔案物件,__exit __方法關閉檔案。

f = open(filename)

char = f.read(1)

while char:

process(char)

char = f.read(1)

f.close()

f = open(filename)

while true:

line = f.readline()

if not line: break

process(line)

f.close()

如果檔案不大可以通過read()和readlines()讀取所有內容。

當檔案比較大可以通過fileinput實現懶惰迭代(讀取實際需要的檔案部分)

import fileinput

for line in fileinput.input(filename):

process(line)

舊式**中使用xreadlines實現懶惰迭代。

從python2.2開始,檔案物件是可迭代的。

for line in open(filename):

process(line)

注意sys.stdin是可迭代的,就像其他檔案一樣。

可以對檔案迭代器執行和普通迭代器一樣的操作。比如:將他們轉換為字串列表(list(open(filename)))

使用print來向檔案內寫入內容會在提供的字串後面增加新的行

python學習筆記 第十一章

import library files import requests 傳送乙個http請求 send http requests res requests.get check error 檢查錯誤 res.raise for status check state code 檢驗狀態碼 print...

Android學習筆記 第十一章

第十一章 使用對話方塊 11.2探索不同型別的對話方塊 android自帶的對話方塊 dialog 所有對話方塊的基類 alertdialog 帶有1,2,3個按鈕的控制項 characterpickerdialog 用於顯示和選擇與基本字元相關聯的聲調字元的dialog datepickdialo...

第十一章python作業

11 1 城市和國家 編寫乙個函式,它接受兩個形參 乙個城市名和乙個國家名。這個函式返回乙個格式為city,country 的字串,如santiago,chile 將這個函式儲存在乙個名為city functions.py的模組中。建立乙個名為test cities.py的程式,對剛編寫的函式進行測...