Python3 輸入和輸出(二)

2022-08-15 17:51:15 字數 3977 閱讀 1671

接上一節

1.讀寫檔案的模式圖

將字串寫入到檔案 foo.txt 中:

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo.txt","w")

f.write("python 是乙個非常好的語言。\n是的,的確非常好!!\n")

# 關閉開啟的檔案

f.close()

開啟檔案 foo.txt,顯示如下:

$ cat /tmp/foo.txt

python是乙個非常好的語言。

是的,的確非常好!!

2.檔案物件的方法

建立了乙個稱為 f 的檔案物件

為了讀取乙個檔案的內容,呼叫 f.read(size), 這將讀取一定數目的資料, 然後作為字串或位元組物件返回。

size 是乙個可選的數字型別的引數。 當 size 被忽略了或者為負, 那麼該檔案的所有內容都將被讀取並且返回。

檔案 foo.txt 已存在(上面例項中已建立):

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo.txt","r")

str =f.read()

print(str)

# 關閉開啟的檔案

f.close()

輸出結果為:

python是乙個非常好的語言。

是的,的確非常好!!

f.readline() 會從檔案中讀取單獨的一行。換行符為 '\n'。f.readline() 如果返回乙個空字串, 說明已經已經讀取到最後一行。

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo.txt","r")

str =f.readline()

print(str)

# 關閉開啟的檔案

f.close()

輸出結果為:

python是乙個非常好的語言。

python是乙個非常好的語言。

f.readlines() 將返回該檔案中包含的所有行。

如果設定可選引數 sizehint, 則讀取指定長度的位元組, 並且將這些位元組按行分割。

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo.txt","r")

str =f.readlines()

print(str)

# 關閉開啟的檔案

f.close()

輸出結果為:

['python 是乙個非常好的語言。\n','是的,的確非常好!!\n']

另一種方式是迭代乙個檔案物件然後讀取每行:

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo.txt","r")

forline inf:

print(line,end='')

# 關閉開啟的檔案

f.close()

輸出結果為:

python是乙個非常好的語言。

是的,的確非常好!!

這個方法很簡單, 但是並沒有提供乙個很好的控制。 因為兩者的處理機制不同, 最好不要混用。

f.write(string) 將 string 寫入到檔案中, 然後返回寫入的字元數。

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo.txt","w")

num =f.write("python 是乙個非常好的語言。\n是的,的確非常好!!\n")

print(num)

# 關閉開啟的檔案

f.close()

輸出結果為:29

如果要寫入一些不是字串的東西, 那麼將需要先進行轉換:

#!/usr/bin/python3

# 開啟乙個檔案

f =open("/tmp/foo1.txt","w")

value =('www.runoob.com',14)

s =str(value)

f.write(s)

# 關閉開啟的檔案

f.close()

開啟 foo1.txt 檔案:

$ cat /tmp/foo1.txt

('www.runoob.com',14)

f.tell() 返回檔案物件當前所處的位置, 它是從檔案開頭開始算起的位元組數。

如果要改變檔案當前的位置, 可以使用 f.seek(offset, from_what) 函式。

from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示檔案的結尾,例如:

from_what 值為預設為0,即檔案開頭。

例:

>>>f =open('/tmp/foo.txt','rb+')

>>>f.write(b'0123456789abcdef')

16>>>f.seek(5)# 移動到檔案的第六個位元組

5>>>f.read(1)

b'5'

>>>f.seek(-3,2)# 移動到檔案的倒數第三位元組

13>>>f.read(1)

b'd'

在文字檔案中 (那些開啟檔案的模式下沒有 b 的), 只會相對於檔案起始位置進行定位。

當你處理完乙個檔案後, 呼叫 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 語句塊要簡短:

>>>withopen('/tmp/foo.txt','r')asf:

...read_data =f.read()

>>>f.closed

true

檔案物件還有其他方法, 如 isatty() 和 trucate(), 但這些比較少用。

python的pickle模組實現了基本的資料序列和反序列化。

通過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存。

通過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件。

基本介面:pickle.dump(obj,file,[,protocol])

有了 pickle 這個物件, 就能對 file 以讀取的形式開啟:x =pickle.load(file)

注:從 file 中讀取乙個字串,並將它重構為原來的python物件。

file:類檔案物件,有read()和readline()介面。

例1:

例2:

#!/usr/bin/python3

importpprint,pickle

#使用pickle模組從檔案中重構python物件

pkl_file =open('data.pkl','rb')

data1 =pickle.load(pkl_file)

pprint.pprint(data1)

data2 =pickle.load(pkl_file)

pprint.pprint(data2)

pkl_file.close()

Python3 輸入和輸出(一)

python兩種輸出值的方式 表示式語句和 print 函式。第三種方式是使用檔案物件的 write 方法,標準輸出檔案可以用 sys.stdout 引用。如果希望輸出的形式更加多樣,可以使用 str.format 函式來格式化輸出值。如果希望將輸出的值轉成字串,可以使用 repr 或 str 函式...

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 先輸入乙個整數,...