python中文件讀取操作詳解

1.打開文件:

>>> f = open(”d:test.txt”, “w”)
第一個參數是文件名稱,包括路徑;
第二個參數是打開的模式mode
’r':只讀(缺省。如果文件不存在,則拋出錯誤)
’w':只寫(如果文件 不存在,則自動創建文件)
’a':附加到文件末尾

’r+’:讀寫如果需要以二進制方式打開文件,需要在mode後面加上字符”b”,比如”rb”"wb” 等


2.讀取內容
f.read(size)參數size表示讀取的數量,可以省略。如果省略size參數,則表示讀取文件所有內容。f.readline()讀取文件一行的內容

f.readlines()讀取所有的行到數組裏面[line1,line2,...lineN]。在避免將所有文件內容加載到內存中,這種方法常常使用,便於提高效率。


3.寫入文件
f.write(string) 將一個字符串寫入文件,如果寫入結束,必須在字符串後面加上”n”。

f.close()關閉文件


4.文件中的內容定位
f.read()讀取之後,文件指針到達文件的末尾,如果再來一次f.read()將會發現讀取的是空內容,如果想再次讀取全部內容,必須將定位指針移動到文件開始:
f.seek(0)這個函數的格式如下(單位是bytes):f.seek(offset, from_what)
from_what表示開始讀取的位置
offset表示從from_what再移動一定量的距離,比如f.seek(10, 3)表示定位到第三個字符並再後移10個字符。from_what值爲0時表示文件的開始,它也可以省略,缺省是0即文件開頭。下面給出一個完整的例 子:
>>> f = open(’/tmp/workfile’, ‘r+’)
>>> f.write(’0123456789abcdef’)
>>> f.seek(5) # Go to the 6th byte in the file
>>> f.read(1)
‘5′
>>> f.seek (-3, 2) # Go to the 3rd byte before the end
>>> f.read(1)

‘d’


5.關閉文件釋放資源文件操作完畢,一定要記得關閉文件f.close(),可以釋放資源供其他程序使用
#打開文件和進行寫操作
--------------------------------
f=open(’test.txt’,'w’)
f.write(’hello’)
f.writelines(['hi','haha'])#多行輸入
f.close()
#append data
f=open(’test.txt’,'a’)
f.write(’hello’)
f.writelines(['hi','haha'])
f.close()
#連續寫入後會自動關閉
open(’test.txt’,'a’).write(’11111rn’)
#把result裏的元素依次填到open函數裏去
result={’hello’,'u’}
exec open(’test.txt’) in result
#
selected = [] # temp list to hold matches
fp = open(’test.txt’)
for line in fp.readlines(): # Py2.2 -> “for line in fp:”
selected.append(line)
del line # Cleanup transient variable
#
open(’test.txt’).readlines()

總結如下
file對象有自己的屬性和方法。先來看看file的屬性。
--------------------------------------
closed #標記文件是否已經關閉,由close()改寫
encoding #文件編碼
mode #打開模式
name #文件名
newlines #文件中用到的換行模式,是一個tuple
softspace #boolean型,一般爲0,據說用於print
file的讀寫方法:
* F.read([size]) #size爲讀取的長度,以byte爲單位
* F.readline([size])
#讀一行,如果定義了size,有可能返回的只是一行的一部分
* F.readlines([size])
#把文件每一行作爲一個list的一個成員,並返回這個list。其實它的內部是通過循環調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。
* F.write(str)
#把str寫到文件中,write()並不會在str後加上一個換行符
* F.writelines(seq)
#把seq的內容全部寫到文件中。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
file的其他方法:
* F.close()
#關閉文件。python會在一個文件不用後自動關閉文件,不過這一功能沒有保證,最好還是養成自己關閉的習慣。如果一個文件在關閉後還對其進行操作會產生ValueError
* F.flush()
#把緩衝區的內容寫入硬盤
* F.fileno()
#返回一個長整型的”文件標籤”
* F.isatty()
#文件是否是一個終端設備文件(unix系統中的)
* F.tell()
#返回文件操作標記的當前位置,以文件的開頭爲原點
* F.next()
#返回下一行,並將文件操作標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。
* F.seek(offset[,whence])
# 將文件打操作標記移到offset的位置。這個offset一般是相對於文件的開頭來計算的,一般爲正數。但如果提供了whence參數就不一定了, whence可以爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。需要注意,如果文件以a或a+的模式打開,每次進 行寫操作時,文件操作標記會自動返回到文件末尾。
* F.truncate([size])
#把文件裁成規定的大小,默認的是裁到當前文件操作標記的位置。如果size比文件的大小還要大,依據系統的不同可能是不改變文件,也可能是用0把文件補到相應的大小,也可能是以一些隨機的內容加上去。
發佈了28 篇原創文章 · 獲贊 11 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章