with open('pi_digits.txt') as f: # 默認模式為‘r',只讀模式 contents = f.read() # 讀取文件全部內容 print contents #
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.1415926535
', '8979323846
', '2643383279
']
------------
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. ") f.write("I am now studying in NJTECH. ")
此時會在當前路徑下創建一個'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. ")
此時的文件內容為:
I am Meringue.
I am now studying in NJTECH.
I major in Machine learning and Computer vision.
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com