python3的輸出輸入檔案OS

2021-08-15 22:26:48 字數 4147 閱讀 8128

檔案:資料持久化最簡單的型別,也叫平面檔案(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

python3輸入輸出

模 式 描 述 r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。rb以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。r 開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。rb 以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。w開啟乙個檔...

Python3 輸入輸出筆記

encoding utf 8 有多組輸入資料,但組數不確定 while true try a,b map int,input split 以空格隔開 print a b map int,list 把每個list的元素轉為int型 except eoferror 捕捉異常 break 先輸入乙個整數,...

Python3 輸入和輸出(二)

接上一節 1.讀寫檔案的模式圖 將字串寫入到檔案 foo.txt 中 usr bin python3 開啟乙個檔案 f open tmp foo.txt w f.write python 是乙個非常好的語言。n是的,的確非常好 n 關閉開啟的檔案 f.close 開啟檔案 foo.txt,顯示如下 ...