Python檔案操作
使用open開啟檔案後一定要記得呼叫檔案物件的close()方法。例如可以用try/finally語句來確保最後能關閉檔案。
file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( )
註:不能把open語句放在try區塊裡,因為當開啟檔案出現異常時,檔案物件file_object無法執行close()方法。
點擊(此處)折疊或開啟
#coding:utf-8 #!/usr/bin/python # Filename: fileRW.py import os context=""" hello world,hello "r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 "w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件 如果文件已存在,先清空,再打开文件""" def createfileBYwrite(filename): f = open(filename,'w') #打开文件open()是file()的别名 f.write(context) #把字符串写入文件 f.close() #关闭文件 #注意,调用writelines写入多行在性能上会比使用write一次性写入要高。 def createfileBYwritelines(filename): f = open(filename,'w') #打开文件open()是file()的别名 try: f.writelines(context) #把字符串写入文件 finally: f.close() #关闭文件 def readBYreadline(filename): f = open(filename) while True: line =f.readline()#当文件指针移动到末尾继续readline会出现错误,所以后面要加判断 if line: print line, else: break f.close() #需要通过循环访问readlines()返回列表中的元素 def readBYreadlines(filename): f = open(filename) try: lines = f.readlines() for line in lines: print line, finally: f.close() #从文件中读取所有内容,赋予一个字符串变量 def readBYread(filename): f = open(filename) try: content = f.read() finally: f.close() print content if __name__== "__main__": filename="hello.txt" createfileBYwritelines(filename) readBYread(filename) #把文件删除掉 if os.path.exists(filename): print "文件存在%s" %filename os.remove(filename) hello world,hello "r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 "w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件 如果文件已存在,先清空,再打开文件 文件存在hello.txt
#2.讀取檔案
input = open('data', 'r') #第二个参数默认为r input = open('data')
#
input = open('data', 'rb')
file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( )
file_object = open('abinfile', 'rb') try: while True: chunk = file_object.read(100) if not chunk: break do_something_with(chunk) finally: file_object.close( )
# #
讀取每行
list_of_all_the_lines = file_object.readlines( )
for line in file_object: process line3.寫入檔案
寫入文字檔案
output = open('data', 'w')
#
output = open('data', 'wb')
output = open('data', 'w+')###### ######寫入資料######
file_object = open('thefile.txt', 'w') file_object.write(all_the_text) file_object.close( )#### ## ######寫入多行#########
file_object.writelines(list_of_text_strings)##########注意,呼叫writelines寫入多行在效能上會比使用write一次性寫入要高。 ######在處理日誌檔案的時候,常常會遇到這樣的情況:日誌檔案巨大,不可能一次把整個檔案讀入到記憶體中進行處理,例如需要在一台物理記憶體為2GB 的機器上處理一個2GB 的日誌文件,我們可能希望每次只處理其中200MB 的內容。 ###在 Python 中,內建的 File 物件直接提供了一個 readlines(sizehint) 函數來完成這樣的事情。以下面的程式碼為例:#########
file = open('test.log', 'r') sizehint = 209715200 # 200M position = 0 lines = file.readlines(sizehint) while not file.tell() - position < 0: position = file.tell() lines = file.readlines(sizehint)######
每次呼叫readlines(sizehint) 函數,會傳回大約200MB 的數據,而且所傳回的必然都是完整的行數據,大多數情況下,傳回的資料的位元組數會稍微比sizehint指定的值大一點(除最後一次呼叫readlines(sizehint) 函數的時候)。通常情況下,Python 會自動將使用者指定的 sizehint 的值調整成內部快取大小的整數倍。
一、用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()
二、文件內容追加,從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()
三、文件內容追加,從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()
四、把標準輸出導向到檔案:
#python >>> import sys >>> sys.stdout = open("stdout.txt", "w") >>> . . .
五、檔案的讀寫
一、檔案開啟:
f = file(name[, mode[, buffering]])
入口參數: name 檔案名稱
選項,字串
# 大小)
傳回值: 文件物件
mode 選項:
"r" 以讀取方式打開,只能讀取文件, 如果檔案不存在,會發生異常
"w"以寫方式打開,只能寫文件, 如果文件不存在,創建該文件
若文件已存在,先清空,再開啟檔案
"rb" 以二進位讀取方式開啟,只能讀取文件, 如果文件不存在,會發生異常
#"wb" 以二進位寫入的異常
#"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 文字檔案(以"rt"方式開啟的檔案)的讀取
#
s = f.readline( )
回傳值: s 為一行,從檔案中讀取的字串,並包含行結束符號。
說明: (1) 如果len(s ) =0 表示已到檔案尾
#2 二進位檔案(以"rb"、"rb "、"wb " 方式開啟的檔案)的讀取
s = f.read( n )
# 針對圖片、影片等檔案必須使用b的模式讀寫
說明: (1) 如果len( s ) =0 表示已到檔案尾
( 2) 檔案讀取後,檔案的指標向後移動len(s) 位元組。
(3)為磁軌已壞,且會發生例外。
六、寫入一個字串# f.write( s )
## 入的字串
說明: (1)檔案寫入後,檔案的指標向後移動len(s) 位元組。 (2)且磁軌已壞,且磁碟已滿會發生例外。 #回傳值:s 是字串,從檔案讀取的內容2、刪除檔案
#import os
os.remove(file)#