python學習 檔案的輸入 輸出

2021-07-29 13:17:13 字數 4147 閱讀 5124

檔案:資料持久化最簡單的型別,也叫平面檔案(flat file)。它僅僅是乙個檔名下的位元組流,把資料從乙個檔案讀入記憶體,然後從記憶體寫入檔案。

讀乙個檔案之前需要開啟它,之後可以呼叫函式來讀寫資料,最後需要關閉檔案。

fileobj = open(filename,mode)
fileobj 是open()返回的檔案物件;

filename  是該檔案的字串名;

mode 是指明檔案型別和操作的字串;

mode的第乙個字母表明對其的操作:

r  表示讀模式

w  表示寫模式。如果檔案不存在則新建立,如果存在則重寫新內容

x   表示檔案不存在的情況下新建立並寫檔案

a   表示如果檔案存在,在檔案末尾追加寫內容

mode 的第二個字母是檔案型別:

t   (或省略)代表文字型別

b    代表二進位制檔案

>>>poem="""there was a young lady named bright,\

whose speed was far faster than light;\

she started one day \

in a relative way,\

and returned on the previous night."""

>>> len(poem)

167>>> fout = open('relativity','wt')  #檔案預設放在python的根目錄下d:\python3

>>> fout.write(poem)

167>>> fout.close()

>>> fout = open('relativity1','wt')

>>> print(poem,file=fout)    # 169  print()缺省會在每個引數後新增空格,在每行結束處新增換行。它在檔案relativity1中預設新增了乙個換行。

>>> fout.close()

使用如下引數,保證print()與write()有同樣的輸出:

sep分隔符:預設是乙個空格 『 『

end 結束字元:預設是乙個換行符 『\n』

>>> fout = open('relativity2','wt')

>>> print(poem,file=fout,sep='',end='')  #167

>>> fout.close()

>>>

如果源字串非常大,可將資料分塊,直到所有字元被寫入:

>>> fout = open('relativity3','wt')

>>> size = len(poem)

>>> offset = 0

>>> chunk = 100

>>> while true:

if offset > size:

break

fout.write(poem[offset:offset+chunk])

offset+=chunk

10067

>>> fout.close()

如果『relativity』檔案已經存在,可使用模式x 避免重寫檔案,還可加入乙個異常處理:

>>> try:

fout = open(『relativity』,』xt』)

fout.write(『stomp stomp stomp』)

except fileexistserror:

print(『relativity already exists!. that was a close one.』)

>>> fin = open('relativity','rt')

>>> poem = fin.read()

>>> fin.close()

>>> len(poem)

167>>>

可設定最大的讀入字元數限制read()函式一次返回的大小,然後把每一塊拼接成原來的字串

>>> poem=''

>>> fin = open('relativity','rt')

>>> chunk = 100

>>> while true:

fragment = fin.read(chunk)  #read會記住已讀取得位置

if not fragment:  # 讀到檔案結尾之後,再次呼叫read()會返回空字串(『』),if not fragment條件被判為false

break

poem += fragment

>>> fin.close()

>>> len(poem)

167

也可使用readline()每次讀入檔案的一行,通過追加每一行拼接成原來的字串poem:

>>> poem = ''

>>> fin = open('relativity','rt')

>>> while true:

line = fin.readline() #對乙個文字檔案,即使空行也有1個字元長度(換行字元』\n』)

if not line:  #當line非空時,返回true,當檔案讀取結束,readline()返回空字串,返回為false

break

poem += line

>>> fin.close()

>>> len(poem)

167

讀取文字檔案最簡單的方式是使用乙個迭代器(iterator),它會每次返回一行。

>>> poem = ''

>>> fin = open('relativity','rt')

>>> for line in fin:

poem += line

>>> fin.close()

>>> len(poem)

167>>>

函式readlines()呼叫時每次讀取一行,並返回單行字串的列表。

如果檔案模式字串中包含』b』,那麼檔案會以二進位制模式開啟,這種情況下,讀寫的是位元組而不是字串。

>>> bdata = bytes(range(0,256))

>>> len(bdata)

256>>> fout = open('bfile','wb')

>>> fout.write(bdata)

256>>> fout.close()

>>> fin = open('bfile','rb')

>>> bdata = fin.read()

>>> len(bdata)

256>>> fin.close()

使用with自動關閉檔案

忘記關閉已開啟的檔案,函式結束時會被關掉。python的上下文管理器(context manager)會清理一些資源,例如開啟的檔案,應該強制剩下的所有寫操作完成後再關閉檔案。它的形式為:with expression as variable:

>>> with open(『relativity』,』wt』) as fout:

fout.write(poem)

完成上下文管理器的**後,檔案會被自動關閉

使用seek()改變位置

函式tell()返回距離檔案開始處的位元組偏移量,函式seek()允許跳轉到檔案其他位元組偏移量的位置。

>>> fin = open('bfile','rb')

>>> fin.tell()

0>>> fin.seek(255)

255

用第二個引數呼叫函式seek():seek(offset,origin)

如果origin等於0(預設為0),從開頭偏移offset個位元組;

如果origin等於1,從當前位置處偏移offset個位元組;

如果origin等於2,距離最後結尾處偏移offset個位元組;

這些值也在標準os模組中被定義:

>>> os.seek_set

0>>> os.seek_cur

1>>> os.seek_end

2

Python檔案輸入輸出

本文以.txt檔案為例,說明python從.txt檔案中讀取內容和向.txt檔案寫入內容的方法。a.txt檔案內容 犬吠水聲中,桃花帶雨濃。樹深時見鹿,溪午不聞鐘。野竹分青靄,飛泉掛碧峰。無人知所去,愁倚兩三松。讀取檔案 open filename,mode open返回乙個檔案物件。第乙個引數是乙...

python 檔案輸入輸出

我們開啟乙個檔案,並使用乙個物件來表示該檔案 f open 檔名,模式 f open f.txt 文字形式 唯讀模式 預設值 f open f.txt rt 文字形式 唯讀模式 同預設值 f open f.txt w 文字形式 覆蓋寫模式 f open f.txt a 文字形式 追加寫模式 讀檔案 ...

python 檔案的輸入輸出

一 檔案內建函式open 和 file 作為開啟檔案之門的 鑰匙 內建函式 open 以及 file 提供了初始化輸入 輸出 i o 操作的通用介面。open 內建函式成功開啟檔案後時候會返回乙個檔案物件,否則引發乙個錯誤.當操作失敗,python 會產生乙個 ioerror 異常。1 open 的...