Python中文件的讀取和寫入

從文件中讀取數據

讀取整個文件

這裡假設在當前目錄下有一個文件名為』pi_digits.txt』的文本文件,裏面的數據如下:

3.1415926535  8979323846  2643383279
with open('pi_digits.txt') as f: # 默認模式為『r』,只讀模式      contents = f.read() # 讀取文件全部內容      print contents # 輸出時在最後會多出一行(read()函數到達文件末會返回一個空字符,顯示出空字符就是一個空行)      print '------------'      print  contents.rstrip() # rstrip()函數用於刪除字符串末的空白
3.1415926535  8979323846  2643383279    ------------  3.1415926535  8979323846  2643383279

逐行讀取

可以通過循環來實現逐行讀取數據:

with open('pi_digits.txt') as f:      for line1 in f:          print line1 # 每行末尾會有一個換行符      print '------------'      for line2 in f:          print line2.rstrip() # 此時文件已經讀完,line2指向文本末尾,因此不會有輸出
3.1415926535    8979323846    2643383279    ------------

讀取文件時相當於有一個指針在記錄讀取的位置,數據讀到哪,這個指針就指到哪邊,繼續讀取數據時會從該位置繼續讀取,因此上面代碼中第二個循環中輸出為空。將上述代碼稍加修改如下:

with open('pi_digits.txt') as f:      for line1 in f:          print line1      print '------------'    with open('pi_digits.txt') as f: # 需要重新打開文本進行讀取      for line2 in f:          print line2.rstrip() # 刪除字符串末尾的空白
3.1415926535    8979323846    2643383279    ------------  3.1415926535  8979323846  2643383279

上述代碼相當於第一次讀取完後關閉該文件又重新打開進行讀取。逐行讀取數據也可以用readline()函數,如下:

with open('pi_digits.txt') as f:      # readline()每一次讀取一行數據,並指向該行末尾      line1 = f.readline() # 讀取第一行數據(此時已經指向第一行末尾)      line2 = f.readline() # 從上一次讀取末尾開始讀取(第二行)        print line1.rstrip()      print line2.rstrip()
3.1415926535  8979323846

有時候我們想要一次性讀取全部數據並且按分開存儲以便於後續的操作,當然用上面的循環可以實現,但python提供了更簡單的方法readlines():

with open('pi_digits.txt') as f:      lines = f.readlines() # 讀取文本中所有內容,並保存在一個列表中,列表中每一個元素對應一行數據  print lines # 每一行數據都包含了換行符    print '------------'  for line in lines:      print line.rstrip()  print '------------'  pi_str = '' # 初始化為空字符  for line in lines:      pi_str += line.rstrip() #字符串連接  print pi_str
['3.1415926535n', '8979323846n', '2643383279n']  ------------  3.1415926535  8979323846  2643383279  ------------  3.141592653589793238462643383279

寫數據到文件

寫數據有幾種不同的模式,最常用的是w』, 『a』, 分別表示擦除原有數據再寫入和將數據寫到原數據之後:

filename = 'write_data.txt'  with open(filename,'w') as f: # 如果filename不存在會自動創建, 'w'表示寫數據,寫之前會清空文件中的原有數據!      f.write("I am Meringue.n")      f.write("I am now studying in NJTECH.n")

此時會在當前路徑下創建一個』write_data.txt』的文本文件,並向文件中寫入數據如下:

I am Meringue.  I am now studying in NJTECH.

下面繼續在該文件中加入新數據:

with open(filename,'a') as f: # 'a'表示append,即在原來文件內容後繼續寫數據(不清楚原有數據)      f.write("I major in Machine learning and Computer vision.n")

此時的文件內容為:

I am Meringue.  I am now studying in NJTECH.  I major in Machine learning and Computer vision.