文件讀寫的基本描述:python
open/文件操做
f=open('/tmp/hello','w')
#open(路徑+文件名,讀寫模式)
#讀寫模式:r只讀,r+讀寫,w新建(會覆蓋原有文件),a追加,b二進制文件.經常使用模式
如:'rb','wb','r+b'等等函數
讀寫模式的類型有:spa
rU 或 Ua 以讀方式打開, 同時提供通用換行符支持 (PEP 278)
w 以寫方式打開,
a 以追加模式打開 (從 EOF 開始, 必要時建立新文件)
r+ 以讀寫模式打開
w+ 以讀寫模式打開 (參見 w )
a+ 以讀寫模式打開 (參見 a )
rb 以二進制讀模式打開
wb 以二進制寫模式打開 (參見 w )
ab 以二進制追加模式打開 (參見 a )
rb+ 以二進制讀寫模式打開 (參見 r+ )
wb+ 以二進制讀寫模式打開 (參見 w+ )
ab+ 以二進制讀寫模式打開 (參見 a+ )指針
注意:日誌
一、使用'W',文件若存在,首先要清空,而後(從新)建立,對象
二、使用'a'模式 ,把全部要寫入文件的數據都追加到文件的末尾,即便你使用了seek()指向文件的其餘地方,若是文件不存在,將自動被建立。內存
f.read([size]) size未指定則返回整個文件,若是文件大小>2倍內存則有問題.f.read()讀到文件尾時返回""(空字串)
file.readline() 返回一行
file.readline([size]) 返回包含size行的列表,size 未指定則返回所有行
for line in f: print line #經過迭代器訪問
f.write("hello\n") #若是要寫入字符串之外的數據,先將他轉換爲字符串.
f.tell() 返回一個整數,表示當前文件指針的位置(就是到文件頭的比特數).
f.seek(偏移量,[起始位置])
用來移動文件指針
偏移量:單位:比特,可正可負
起始位置:0-文件頭,默認值;1-當前位置;2-文件尾
f.close() 關閉文件字符串
讀文件的方法:generator
read ()的方法是一次性把文件的內容以字符串的方式讀到內存, 放到一個字符串變量中it
readlines()的方法是一次性讀取全部內容, 並按行生成一個list ,
由於read()和readlines()是一次性把文件加載到內存, 若是文件較大, 甚至比內存的大小還大, 內存就會爆掉。 因此,這兩種方法只適合讀取小的文件。
實際工做中,會碰到讀取10幾G的大文件的需求, 好比說日誌文件。 這時候就要用的新的讀取文件的方法。 這裏提供兩種方法, 有簡單,有複雜,但基本原理都是同樣的。 就是利用到生成器generator。
python 讀取大文件使用迭代器會減少內存的消耗
方法1:利用open(「」, 「」)系統自帶方法生成的迭代對象
使用with打開文件並將文件對於對象f當作迭代對象,for line in f 這種用法是把文件對象f看成迭代對象, 系統將自動處理IO緩衝和內存管理,當讀取大文件時不會一次性將文件讀取到內存中,形成內存爆掉,迭代器會將需求的內容逐次讀入內存
with open(file,'r') as f:
for line in f:
print(line)
逐行讀取文件內容,避免一次將文件內容所有加載到內存中;
方法二:將文件切分紅小段,每次處理完小段內容後,釋放內存
這裏會使用yield生成自定義可迭代對象, 即generator, 每個帶有yield的函數就是一個generator。