天天看點

【13】Python之常用檔案操作

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,如需轉載請自行聯系原作者