文件操作也就讀操作和寫操作了,我們一個一個來說。。
讀文件操作
其實和在日常我們在使用文件時是一樣的,不過讀文件還是寫文件,第一件事情就是打開文件。
fileRead = open('/test.txt' , 'r') #r 表示打開文件的格式是讀模式
open()是Python的內置函數,如果文件不存在會拋出異常“IOerror”。
一般情況下,小文件可以直接使用read()方法讀取,一次將文件的內容全部讀到內存中,返回的是 str 類型。
但有時候文件內容可能會很大,如果一次性讀入內存會卡死的,這個時候就可以使用 read(size) 或者 readline()。 size 指定每次讀取的字節數。通過多次循環獲取文件的全部內容。
for line in fileRead.readlines(): #逐行讀取 print(line)
最后,一定不要忘記關閉文件。切記切記切記!
fileRead.close()
寫文件操作
類似讀模式,寫文件打開文件時也需要定義為w(寫)模式,但是此時的打開文件並不是真正意義上的打開,而是創建一個新的文件,如果之前存在此文件名,原文件將被現文件覆蓋。
loginFile = open("login.txt", "w") loginFile.write("寫入第一行\n") loginFile.write("寫入第二行\n") loginFile.close()
此時打開login.txt文件,發現以前的內容已沒有,內容如下:
寫入第一行
寫入第二行
那有人問了,我怎么更新文件。當然,Python提供的模式還有一個叫追加(a)模式。此模式下write()的內容都會更新原有內容之后。
loginFile = open("login.txt", "a") loginFile.write("寫入第3行\n") loginFile.close()
此時再打開login文件你就會看到:
寫入第一行
寫入第二行
寫入第3行
但是,如果要修改文件我該怎么辦了,有沒有這種模式呢。呵呵。。當然--沒有的。那么怎么修改呢,那只能先修改到一個中間文件中,然后再寫回來了。代碼如下:
1 loginFile = open("login.txt", "r") # 打開原文件 2 loginFileUpdate = open("loginUpdate.txt", "w") #創建一個中間文件 3 for line in loginFile: 4 if userName in line: #找到修改位置進行修改 5 line = 'I am newUser' 6 loginFileUpdate.write(line) 7 loginFile.close() 8 loginFileUpdate.close() 9 #將中間文件的內容回寫到原配置文件 10 loginFile = open("login.txt", "w") 11 loginFileUpdate = open("loginUpdate.txt", "r") 12 for line in loginFileUpdate: 13 loginFile.write(line) 14 loginFile.close() 15 loginFileUpdate.close()
不同模式打開文件的完全列表:
模式 | 描述 |
---|---|
r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
rb | 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。 |
r+ | 打開一個文件用於讀寫。文件指針將會放在文件的開頭。 |
rb+ | 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。 |
w | 打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
wb | 以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
w+ | 打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
wb+ | 以二進制格式打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
a | 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
ab | 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
a+ | 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。 |
ab+ | 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。 |
file對象相關的所有屬性的列表:
屬性 | 描述 |
---|---|
file.closed | 返回true如果文件已被關閉,否則返回false。 |
file.mode | 返回被打開文件的訪問模式。 |
file.name | 返回文件的名稱。 |
file.softspace | 如果用print輸出后,必須跟一個空格符,則返回false。否則返回true。 |