1. 程式人生 > >Python:檔案的讀取、建立、追加、刪除、清空(轉)

Python:檔案的讀取、建立、追加、刪除、清空(轉)

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()

注意:僅當以 "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!')