Python:檔案的讀取、建立、追加、刪除、清空(轉)
阿新 • • 發佈:2019-02-07
Python:檔案的讀取、建立、追加、刪除、清空
1.用Python建立一個新檔案,內容是從0到9的整數, 每個數字佔一行:
#python
>>>f=open('f.txt','w') # r只讀,w可寫,a追加
>>>for i in range(0,10):f.write(str(i)+'\n')
. . .
>>> f.close()
2.檔案內容追加,從0到9的10個隨機整數:
#python
>>>import random
>>>f=open('f.txt','a')
>>>for i in range(0,10):f.write(str(random.randint(0,9)))
. . .
>>>f.write('\n')
>>>f.close()
3.檔案內容追加,從0到9的隨機整數, 10個數字一行,共10行:
#python
>>> import random
>>> f=open('f.txt','a')
>>> for i in range(0,10):
. . . for i in range(0,10):f.write(str(random.randint(0,9)))
. . . f.write('\n')
. . .
>>> f.close()
4.把標準輸出定向到檔案:
#python
>>> import sys
>>> sys.stdout = open("stdout.txt", "w")
>>> . . .
##############檔案的操作###############################
一、檔案開啟:
f = file(name[, mode[, buffering]])
入口引數: name 檔名
mode 選項,字串
buffering 是否緩衝 (0=不緩衝,1=緩衝, >1的int數=緩衝區大小)
返回值 : 檔案物件
mode 選項:
"r" 以讀方式開啟,只能讀檔案 , 如果檔案不存在,會發生異常
"w" 以寫方式開啟,只能寫檔案, 如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再開啟檔案
"rb" 以二進位制讀方式開啟,只能讀檔案 , 如果檔案不存在,會發生異常
"wb" 以二進位制寫方式開啟,只能寫檔案, 如果檔案不存在,建立該檔案; 如果檔案已存在,先清空,再開啟檔案
"rt" 以文字讀方式開啟,只能讀檔案 , 如果檔案不存在,會發生異常
"wt" 以文字寫方式開啟,只能寫檔案, 如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再開啟檔案
"rb+" 以二進位制讀方式開啟,可以讀、寫檔案 , 如果檔案不存在,會發生異常
"wb+" 以二進位制寫方式開啟,可以讀、寫檔案, 如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再開啟檔案
二、關閉檔案
f.close()
當檔案讀寫完畢後,應關閉檔案。
檔案使用完畢後必須關閉,因為檔案物件會佔用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的
三、清空檔案內容
f.truncate()
檔案被開啟後,其物件儲存在 f 中, 它會記住檔案的當前位置,以便於執行讀、寫操作,這個位置稱為檔案的指標( 一個從檔案頭部開始計算的位元組數 long 型別 )。
(2)檔案開啟時的位置:
以"r" "r+" "rb+" 讀方式, "w" "w+" "wb+"寫方式 開啟的檔案,
一開始,檔案指標均指向檔案的頭部。
(3) 獲取檔案指標的值:
L = f.tell()
(4) 移動檔案的指標
f.seek( 偏移量, 選項 )
選項 =0 時, 表示將檔案指標指向從檔案頭部到 "偏移量"位元組處。
選項 =1 時, 表示將檔案指標指向從檔案的當前位置,向後移動 "偏移量"位元組。
選項 =2 時, 表示將檔案指標指向從檔案的尾部,,向前移動 "偏移量"位元組。
五、從檔案讀取指內容
(1) f.read( size )
引數:s 要寫入的字串
說明:(1)檔案寫入後,檔案的指標向後移動 len(s) 位元組。
(2)如果磁軌已壞,或磁碟已滿會發生異常。
返回值: s 是字串,從檔案中讀取的內容
要寫入特定編碼的文字檔案,請給open()函式傳入encoding引數,將字串自動轉換成指定編碼
七、刪除檔案
import os
os.remove(file)
八、try 或with...open 方法
由於檔案讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try ... finally來實現:
1.用Python建立一個新檔案,內容是從0到9的整數, 每個數字佔一行:
#python
>>>f=open('f.txt','w') # r只讀,w可寫,a追加
>>>for i in range(0,10):f.write(str(i)+'\n')
. . .
>>> f.close()
2.檔案內容追加,從0到9的10個隨機整數:
#python
>>>import random
>>>f=open('f.txt','a')
>>>for i in range(0,10):f.write(str(random.randint(0,9)))
. . .
>>>f.write('\n')
>>>f.close()
3.檔案內容追加,從0到9的隨機整數, 10個數字一行,共10行:
#python
>>> import random
>>> f=open('f.txt','a')
>>> for i in range(0,10):
. . . for i in range(0,10):f.write(str(random.randint(0,9)))
. . . f.write('\n')
. . .
>>> f.close()
4.把標準輸出定向到檔案:
#python
>>> import sys
>>> sys.stdout = open("stdout.txt", "w")
>>> . . .
##############檔案的操作###############################
一、檔案開啟:
f = file(name[, mode[, buffering]])
入口引數: name 檔名
mode 選項,字串
buffering 是否緩衝 (0=不緩衝,1=緩衝, >1的int數=緩衝區大小)
返回值 : 檔案物件
mode 選項:
"r" 以讀方式開啟,只能讀檔案 , 如果檔案不存在,會發生異常
"w" 以寫方式開啟,只能寫檔案, 如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再開啟檔案
"rb" 以二進位制讀方式開啟,只能讀檔案 , 如果檔案不存在,會發生異常
"wb" 以二進位制寫方式開啟,只能寫檔案, 如果檔案不存在,建立該檔案; 如果檔案已存在,先清空,再開啟檔案
"rt" 以文字讀方式開啟,只能讀檔案 , 如果檔案不存在,會發生異常
"wt" 以文字寫方式開啟,只能寫檔案, 如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再開啟檔案
"rb+" 以二進位制讀方式開啟,可以讀、寫檔案 , 如果檔案不存在,會發生異常
"wb+" 以二進位制寫方式開啟,可以讀、寫檔案, 如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再開啟檔案
二、關閉檔案
f.close()
當檔案讀寫完畢後,應關閉檔案。
檔案使用完畢後必須關閉,因為檔案物件會佔用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的
三、清空檔案內容
f.truncate()
注意:僅當以 "r+" "rb+" "w" "wb" "wb+"等以可寫模式開啟的檔案才可以執行該功能
四、檔案的指標定位與查詢
(1)檔案指標:檔案被開啟後,其物件儲存在 f 中, 它會記住檔案的當前位置,以便於執行讀、寫操作,這個位置稱為檔案的指標( 一個從檔案頭部開始計算的位元組數 long 型別 )。
(2)檔案開啟時的位置:
以"r" "r+" "rb+" 讀方式, "w" "w+" "wb+"寫方式 開啟的檔案,
一開始,檔案指標均指向檔案的頭部。
(3) 獲取檔案指標的值:
L = f.tell()
(4) 移動檔案的指標
f.seek( 偏移量, 選項 )
選項 =0 時, 表示將檔案指標指向從檔案頭部到 "偏移量"位元組處。
選項 =1 時, 表示將檔案指標指向從檔案的當前位置,向後移動 "偏移量"位元組。
選項 =2 時, 表示將檔案指標指向從檔案的尾部,,向前移動 "偏移量"位元組。
五、從檔案讀取指內容
(1) f.read( size )
with open('*.txt', 'r') as f: print(f.read())
(2) f.readline( )
with open('t.txt', 'r') as f:
for line in f:
pass
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'刪掉
呼叫read()會一次性讀取檔案的全部內容,如果檔案有10G,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼呼叫。
如果檔案很小,read()一次性讀取最方便;如果不能確定檔案大小,反覆呼叫read(size)比較保險;如果是配置檔案,呼叫readlines()最方便:
六向檔案寫入一個字串
f.write(s)引數:s 要寫入的字串
說明:(1)檔案寫入後,檔案的指標向後移動 len(s) 位元組。
(2)如果磁軌已壞,或磁碟已滿會發生異常。
返回值: s 是字串,從檔案中讀取的內容
要寫入特定編碼的文字檔案,請給open()函式傳入encoding引數,將字串自動轉換成指定編碼
七、刪除檔案
import os
os.remove(file)
八、try 或with...open 方法
由於檔案讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try ... finally來實現:
try:
f = open('t.txt', 'r')
print(f.read())
finally:
if f:
f.close()
但是每次都這麼寫實在太繁瑣,所以,Python引入了with語句來自動幫我們呼叫close()方法:with open('t.txt', 'w') as f:
f.write('Hello, world!')