打開方式 | 詳細釋義 |
r | 以只讀方式打開文件。文件的指針會放在文件的開頭。這是默認模式。 |
rb | 以二進制只讀方式打開一個文件。文件指針會放在文件的開頭。 |
r+ | 以讀寫方式打開一個文件。文件指針將會放在文件的開頭。(讀取文件時,只能讀,不能新建,若是文件沒有,則會異常報錯) |
rb+ | 以二進制讀寫方式打開一個文件。文件指針會放在文件的開頭。 |
w | 以寫入方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件 |
wb | 以二進制寫入方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件 |
w+ | 以讀寫方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件 |
wb+ | 以二進制讀寫方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件 |
a | 以追加方式打開一個文件。若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入 |
ab | 以二進制追加方式打開一個文件。若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入 |
a+ | 以讀寫方式打開一個文件,若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入 |
ab+ | 以二進制追加方式打開一個文件。若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入 |
示例:java
1 print("->文件句柄的獲取,讀操做:") 2 3 f = open('無題','r',encoding='utf8') #此行做用就是獲取文件句柄 4 d = f.read() #read方法讀取文件全部內容 5 f.close() 6 print(d) 7 8 print('->例二:') 9 f = open('無題','r',encoding='utf8') 10 e = f.read(9) #read方法中索引表示讀取字符數 11 f.close() 12 print(e) 13 #python3中,文件中一箇中英文都佔位1
運行結果:python
->文件句柄的獲取,讀操做: 昨夜星辰昨夜風 畫樓西畔桂堂東 身無綵鳳雙飛翼 心有靈犀一點通 ->例二: 昨夜星辰昨夜風 畫
知識點:app
1. 寫操做前,文件先格式化清空文件函數
2.清空操做,在執行open的w方法後,清空spa
1 print("寫的操做,寫文件的時候,不能調用讀方法,讀文件的時候,不能調用寫方法") 2 3 f = open('python','w',encoding='utf8') 4 f.write("I must learn python \nbecause, python is important \n") 5 f.write("java is better?") 6 f.write("maybe") #上面的語句,沒有加換行符,因此輸出的內容是緊接的 7 f.close()
運行結果:unix
打開文件後顯示以下指針
I must learn python because, python is important java is better?maybe
語法格式:code
f = open('文件名','a','encoding = utf8')
文件這種方法爲追加模式:1, 空白文件中,直接從頭開始寫入內容; 2 有內容的文件,會在末尾開始繼續寫入內容對象
示例:blog
f = open('python','a',encoding='utf8') f.write("花開又花落") f.close()
運行結果:
I must learn python because, python is important java is better?maybe花開又花落
readline是逐行讀取
readlines是全文讀取
示例1 readline示例:
# -*- coding:utf-8 -*- ''' 實際的工做中,使用的方法幾乎爲readline方法 ''' print("readline方法") f = open('無題','r',encoding='utf-8') a = f.readline() #讀取一行內容 print("此時光標位置:",f.tell()) b = f.readline() #繼續讀取一行內容 print("此時光標位置:",f.tell()) print(a.strip()) #strip是字符串方法中去除空格和換行的方法 print(b.strip())
運行結果:
readline方法 此時光標位置: 23 此時光標位置: 46 昨夜星辰昨夜風 畫樓西畔桂堂東
我讀取的文件內容原件:
昨夜星辰昨夜風
畫樓西畔桂堂東
身無綵鳳雙飛翼
心有靈犀一點通
南京
江蘇
中國
示例2 文件內容的遍歷示例:
#遍歷文件,在第四行打印分割線,而後繼續循環 count = 0 f = open('無題','r',encoding='utf-8') for line in f: if count == 3: print('%%%%####%%%%') count+=1 continue print(line.strip()) count+=1 f.close()
運行結果:
昨夜星辰昨夜風 畫樓西畔桂堂東 身無綵鳳雙飛翼 %%%%####%%%% 南京 江蘇 中國
示例3 readlines方法:
print("readlines方法,會將每行的內容組成一個列表打印") f = open('無題','r',encoding='utf8') c = f.readlines() print(c) print(id(c)) print(id(f)) for i in c: print(i.strip()) print("遍歷方法") f.seek(0) #將文件指針設置到初始位置,就是文件開頭 for i in f: print(i.strip()) f.close() #文件的操做中,close()方法必定不能忘記
運行結果:
readlines方法,會將每行的內容組成一個列表打印 ['昨夜星辰昨夜風\n', '畫樓西畔桂堂東\n', '身無綵鳳雙飛翼\n', '心有靈犀一點通\n', '南京\n', '江蘇\n', '中國'] 38154568 3902272 昨夜星辰昨夜風 畫樓西畔桂堂東 身無綵鳳雙飛翼 心有靈犀一點通 南京 江蘇 中國 遍歷方法 昨夜星辰昨夜風 畫樓西畔桂堂東 身無綵鳳雙飛翼 心有靈犀一點通 南京 江蘇 中國
示例:
f = open('無題','r',encoding='utf8') f.read(4) print('當前光標位置',f.tell()) f.seek(10) print('當前光標位置',f.tell()) f.close() #read時,一箇中文算三個字符
運行結果:
當前光標位置 12
當前光標位置 10
import sys,time for i in range(20): sys.stdout.write("#") sys.stdout.flush() time.sleep(1)
f = open('test','w') f.write("hello") f.write("\n") f.write("python") f.flush() #這樣不用執行close方法,內存中的數據,就會寫入到disk f.close() f = open('test','a') f.truncate(2) #截斷方法,光標從2開始日後截取 f.close()
文件經常使用的方法彙總以下:
#-- 文件基本操做 output = open(r'C:\spam', 'w') # 打開輸出文件,用於寫 input = open('data', 'r') # 打開輸入文件,用於讀。打開的方式能夠爲'w', 'r', 'a', 'wb', 'rb', 'ab'等 fp.read([size]) # size爲讀取的長度,以byte爲單位 fp.readline([size]) # 讀一行,若是定義了size,有可能返回的只是一行的一部分 fp.readlines([size]) # 把文件每一行做爲一個list的一個成員,並返回這個list。其實它的內部是經過循環調用readline()來實現的。若是提供size參數,size是表示讀取內容的總長。 fp.readable() # 是否可讀 fp.write(str) # 把str寫到文件中,write()並不會在str後加上一個換行符 fp.writelines(seq) # 把seq的內容所有寫到文件中(多行一次性寫入) fp.writeable() # 是否可寫 fp.close() # 關閉文件。 fp.flush() # 把緩衝區的內容寫入硬盤 fp.fileno() # 返回一個長整型的」文件標籤「 fp.isatty() # 文件是不是一個終端設備文件(unix系統中的) fp.tell() # 返回文件操做標記的當前位置,以文件的開頭爲原點 fp.next() # 返回下一行,並將文件操做標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。 fp.seek(offset[,whence]) # 將文件打操做標記移到offset的位置。whence能夠爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。 fp.seekable() # 是否能夠seek fp.truncate([size]) # 把文件裁成規定的大小,默認的是裁到當前文件操做標記的位置。 for line in open('data'): print(line) # 使用for語句,比較適用於打開比較大的文件 open('f.txt', encoding = 'latin-1') # Python3.x Unicode文本文件 open('f.bin', 'rb') # Python3.x 二進制bytes文件 # 文件對象還有相應的屬性:buffer closed encoding errors line_buffering name newlines等