File對象使用open函數來建立,下表列出file對象常用的函數。
序号
方法
描述
1
file.close()
關閉檔案。關閉檔案後不能在進行讀寫。注:檔案打開後别忘記關閉。
2
file.flush()
重新整理檔案内部緩沖,直接把内部緩沖區的資料立刻寫入檔案,而不是被動的等待緩沖區的寫入。(緩沖區好比PC機的記憶體)
3
file.fileno()
傳回一個整型的檔案描述(file descriptor FD整型),可以用在如OS子產品的read方法等一些底層操作上
4
file.isatty()
如果檔案連接配接到一個終端上傳回True,否則False
5
file.next()
傳回檔案下一行
6
file.read([size])
從檔案讀取指定的位元組數,如果未給定或為負則讀取所有。
7
file.readline([size])
讀取整行,包括\n字元
8
file.readlines([sizeint])
讀取所有行并傳回清單,若給定sizeint>0,傳回總和大約為sizeint位元組的行,實際讀取值肯能比sizeint較大,因為需要填充緩沖區
9
file.seek(offset[, whence])
設定檔案目前位置
10
file.tell()
傳回檔案目前位置
11
file.truncate([size])
從檔案的首行首字元開始截斷,截斷檔案為size個字元,五size表示從目前位置截斷;截斷之後V後面的所有字元被删除,其中Windows系統下的換行代表2個字元大小。
12
file.write(str)
将字元串寫入檔案,沒有傳回值。
13
file.writelines(sequence)
向檔案寫入一個序列字元串清單,如果需要換行則要自己加入每行的換行符。
概述:關閉檔案。關閉檔案後不能在進行讀寫。注:檔案打開後别忘記關閉。
f=open('so_file',encoding="utf-8") #打開檔案,并讀取。Windows上預設字元集GDK,是以這裡指定了字元集,不然會報錯。(#UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 106: illegal multibyte sequence )
data=f.read() #将讀取的内容指派給data
print(data)
f.close() #一定要關閉,才是一個完成的讀取檔案方式。
打開檔案的模式有:
r,隻讀模式(預設)。
w,隻寫模式。【不可讀;不存在則建立;存在則删除内容;】
a,追加模式。【可讀; 不存在則建立;存在則隻追加内容;】
"+" 表示可以同時讀寫某個檔案
r+,可讀寫檔案。【可讀;可寫;可追加】
w+,寫讀
a+,同a
"U"表示在讀取時,可以将 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
rU
r+U
"b"表示處理二進制檔案(如:FTP發送上傳ISO鏡像檔案,linux可忽略,windows處理二進制檔案時需标注)
rb
wb
ab
File.flush()
概述:用來重新整理緩沖區的,即将緩沖區的資料立刻寫入檔案,同時清空緩沖區,不需要是被動的等待輸出緩沖區寫入。
一般情況下檔案關閉後會自動重新整理緩沖區,但有時你需要在關閉前重新整理她,這時就可以使用flush方法。
f=open('so_file','wb') #打開檔案,并讀取。
# data=f.read() #将讀取的内容指派給data
# print(data)
print("file name is :",f.name)
f2=f.flush()
# print(f2)
f.close()
運作結果:
file name is : so_file
注意:二進制模式下,不支援編碼參數
緩沖flush作用效果圖:(執行有驚喜)
import sys,time
f=open('so_file','r+',encoding="utf-8")
for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
####################
File.fileno()
概述:傳回一個整型的檔案描述(file descriptor FD整型),可以用在如OS子產品的read方法等一些底層操作上
# f2=f.flush()
fidd=f.fileno()
print("file》》》",fidd) #傳回檔案描述符
file》》》 3
File.isatty()
概述:如果檔案連接配接到一個終端上傳回True,否則False
fin=f.isatty()
print("file》》》",fin)
file》》》 False
File.readline()
概述:讀取整行,包括\n字元
# for index in range(5):
# line = next(fo)
# print ("第 %d 行 - %s" % (index, line))
data=f.readline() #不填預設讀取一行
print("讀取首行:",data)
data1=f.readline(5) #讀取N個字元
print("讀取%s個字元" %(data1),data1)
讀取首行: Somehow, it seems the love I knew was always the most destructive kind
讀取Yeste個字元 Yeste
File.readlines()
概述:用于讀取所有行(直到結束符 EOF)并傳回清單,該清單可以由 Python 的 for... in ... 結構進行處理。 如果碰到結束符 EOF 則傳回空字元串。
如果碰到結束符 EOF 則傳回空字元串。
data=f.readlines() #全部列印結尾加\n
第十行不列印
for index,info in enumerate(f.readlines()):
if index==9:
print('--------GO-------')
continue
print(info.strip())
高效的循環方法:
count=0
for line in f:
if count==9:
print('---------GO--------')
count +=1
print(line)
count +=1
File.tell()
概述:回報檔案目前位置,即檔案指針目前位置
data=f.readline()
print("讀取資料為:%s"%(data))
data2=f.tell()
print("目前位置:%s" %(data2))
讀取資料為:Somehow, it seems the love I knew was always the most destructive kind
目前位置:72 #read結束,全文72行
File.seek()
概述:指針移動到之指定位置
File.truncate()
概述:用于從檔案的首行首字元開始截斷,截斷檔案為 size 個字元,無 size 表示從目前位置截斷;截斷之後 V 後面的所有字元被删除,其中 Widnows 系統下的換行代表2個字元大小。
.truncate()什麼都不寫,清空檔案。指定數字就會截斷個數。
File.write()
修改部分值,寫入新檔案。
f=open('so_file','r',encoding="utf-8")
f_new=open('so_file2','w',encoding="utf-8")
if "生命的滋味是甜的" in line:
line=line.replace("生命的滋味是甜的","生命的滋味是幸福的")
f_new.write(line)
f_new.close()
So_file檔案内容
Somehow, it seems the love I knew was always the most destructive kind
不知為何,我經曆的愛情總是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戲弄生命 視其為愚蠢的遊戲
The way the evening breeze
就如夜晚的微風
May tease the candle flame
So_file2檔案内容(新檔案)
生命的滋味是幸福的
本文轉自白羊IT51CTO部落格,原文連結:http://blog.51cto.com/000011211684/1983284,如需轉載請自行聯系原作者