Python3 2官方文件翻譯 檔案讀寫

2021-06-21 14:54:12 字數 4379 閱讀 3081

open()方法返回乙個檔案物件,在大多數情況下傳遞兩個物件

: open

(filename, mode);

例如:>>> f = open(』

/tmp/workfile』, 

』w』)

第乙個引數是包含檔名稱的字串,第二個引數是包含描述檔案使用方式的字串。如果檔案唯讀標記為「r」,

只寫標記為「

w」(相同名字的已經存在檔案將會被清除)

,, 「a」表示新增到檔案結尾,資料就會自動的新增到檔案的結尾。「r+

」表示可讀可寫。

mode

引數是可選擇的,如果沒有此引數,預設表示可讀的。

正常來說,檔案會在text

模式下開啟,這就意味著你可以讀寫字串到檔案中,並且可以設定讀寫的編碼格式(預設編碼格式是

utf-8

).』b』表示用二進位制的方式開啟檔案。這些資料將會用位元組物件形式進行讀寫。這種模式可以用在所有的非文字格式檔案中。

在文字格式中,預設的將平台特殊的換行結束符(在unix是\n

,在windos

是\r\n

)換成\n

並在寫入檔案時轉換回去。這是檔案修改是無害的,但是在

jpeg

或者exe

檔案中會破壞二進位制資料。所以當讀寫這類檔案時最好用二進位制格式。

在這節所有的例子中假設乙個名f

的檔案已建立。 

為了讀取檔案的內容,呼叫f.read(size). 

這個方法就能讀取一定大小的資料並且返回乙個字串或者位元組物件。

size

是可選擇的數字引數。當

size

缺少或者是負數,返回的就是整個檔案內容。如果檔案內容是你記憶體的兩倍大,那就是你的問題了。不過,你應該盡可能大位元組的讀取檔案內容,如果已經達到檔案尾,

f.read()

將返回乙個空字串(「)、

>>> f.read()

』this is the entire file.\n

』>>> f.read() 』』

f.readline()就是從檔案中讀取單行,字元結尾會帶乙個新的字元「

\n」,並且僅當在檔案最後一行並沒有換行符時才會省略。如果

f.readline()

會返回乙個空字串,則表示已經達到檔案的末尾。當用「

\n」表示乙個空行時,將返回乙個只含有乙個換行符的字串。

>>> f.readline()

』this is the first line of the file.\n

』>>> f.readline()

』second line of the file\n

』>>> f.readline() 『』

f.readlines()返回乙個包含檔案中多行資料的列表。如果傳入乙個可選擇的

sizehint

,它就會從檔案中讀取至少包含指定位元組數的完整行並返回之。這個方法通常用來高效地從大檔案中逐行讀取資料,而不會把整個所有檔案內容載入到記憶體中。此方法只返回完整的檔案行。

>>> f.readlines() [』

this is the first line of the file.\n』, 

』second line of the file\n』]

另一種可供選擇讀取多行的方法就是迴圈檔案物件。這是一種記憶體高效,快速和並且**簡潔的方式。

>>> for line in f:

... print(line, end=』』

)...

this is the first line of the file.

second line of the file

後一種方法雖然**簡潔但是不能提供更加細節控制能力,由於兩個方法管理不同的行快取,千萬不要搞混。

f.write(string) 把位元組內容寫入到檔案中,返回寫入到檔案的字元數量。

>>> f.write(』

this is a test\n』)

15 除了寫字串也可以寫入其他內容,但是必須首先轉換為字串。

>>> value = (』

the answer

』, 42)

>>> s = str(value)

>>> f.write(s) 18

f.tell()返回乙個指檔案物件在檔案中的當前位置的整數。表示從檔案開頭到當前位置的位元組數。想要改變檔案物件的位置,用方法

f.seek(offset, from_what). 

位置是通過新增

offset

到參考點計算出來的。參考點通過

from_what

引數來選擇。0 的

from_what

值意思就是從檔案開頭開始。值為

1 時代表從當前檔案位置開始計算,值為

2時表示從檔案為開始計算。

from_what

引數可以省略並且其預設值為

0,即使用檔案開頭作為預設參考點。

>>> f = open(』

/tmp/workfile』, 

』rb+』)

>>> f.write(b』

0123456789abcdef』)

16 >>> f.seek(5) # go to the 6th byte in the file 5

>>> f.read(1) b』

5』>>> f.seek(-3, 2) # go to the 3rd byte before the end 13

>>> f.read(1) b』

d』在文字檔案中(在字串模式下用『b

』開啟檔案),僅僅婿從檔案頭開始計算相對位置(使用

seek(0,2)

從檔案尾計算時就會引發異常)

當你使用乙個檔案時,呼叫方法f.close()

來關閉它,然後釋放任何被開啟檔案所占用的系統資源。在呼叫方法

f.close()

之後,試圖再次呼叫檔案物件就會自動失敗。

>>> f.close()

>>> f.read()

traceback (most recent call last):

file "", line 1, in ?

valueerror: i/o operation on closed file

當處理檔案物件時候,用with

關鍵字是個很好的習慣。它有個益處: 在檔案一系列操作結束後它就可以正確地關閉。從某種角度而言 異常也有值得表揚一面。它也比同等功能的

try-finally 

**塊更簡潔。

>>> with open(』

/tmp/workfile』, 

』r』) as f:

... read_data = f.read()

>>> f.closed

true

檔案物件有許多其他方法,例如isatty()

和truncate()

,這些方法相對使用的不太頻繁。詳細請檢視庫檔案指導文件。

字串很容易從檔案中讀寫。數字則需要更多的處理,由於read()

方法只能返回字串,因此它不得不傳給像

int()

函式,該方法能接受字串「

123」而返回數值

123. 

但是,當你想更複雜的資料型別時候,例如列表,字典或者類例項,這些變得更加複雜。

為了不讓使用者不同編碼和除錯**來儲存複雜資料型別,python

提供了乙個叫

pickle

的標準介面。這是乙個能處理任何

python

物件的神奇模組。(甚至一些格式的

python

**)。並且把它轉化為字串。這個過程叫做

pickling

(封裝)。 從字串形式來重建這個物件就成

unpickling

(拆封)。在拆封和封裝過程中,表現物件的字串形式會儲存在檔案或者資料中,或者通過網路連線傳送給遠端機器。

,和乙個正在開啟寫的檔案物件

f,最簡單封裝物件的方法僅僅用一行**:

pickle.dump(x, f)

如果f是乙個正在讀的檔案物件,可用如下**重構這個物件:

x = pickle.load(f)

(當封裝許多物件時候或者當你不想寫封裝的資料到檔案,這裡還有其他方法,具體請諮詢在python

庫檔案引用有關

pickle

的完整文件。)

pickle是乙個來建立需要儲存或者被其他程式或者同乙個程式將來需要重新建立的

python

物件的標準方法。術語稱為

persistent

物件(持久化物件)。

pickle

模組被如此廣泛的使用。許多

python

擴充套件開發者都非常注意像矩陣這樣的新資料型別是否可以被適當的封裝和拆封。

Python3 2官方文件翻譯 模板

string模組包含乙個用途廣泛的類,此類為終端使用者的編輯提供了簡單的語法支援。這讓使用者不修改應用程式的前提下實現他們應用程式的定製。這種格式使用 加有效的 python 識別符號 數字 字母和下劃線 形式的佔位符名稱。通過在佔位符兩側使用大括號便可以不用空格分隔在其後面跟隨更多的字母和數字字元...

Python3 2官方文件翻譯 迭代器

到眼下為止。你可能已注意到很多容器物件都能夠用for 語句進行迴圈 這樣的訪問風格清楚簡潔方便。迭代器的應用是python 遍歷統一。在這樣的場景背後。for語句呼叫容器物件 iter 方法。函式返回乙個迭代器物件。在迭代器物件裡定義了每次僅僅能訪問乙個元素的方法 next 當容器裡面沒有元素的時候...

Python3 2官方文件翻譯 標準庫概覽(一)

os模組提供主要許多與作業系統互動的函式。import os os.getcwd return the current working directory c python31 os.chdir server accesslogs change current working directory o...