對文本操作的流程:
打開文件,得到文件句柄並賦值給一個變量
通過句柄對文件進行操作
關閉文件
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
name : 一個包含了你要訪問的文件名稱的字符串值。
mode : mode 決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,默認文件訪問模式為只讀(r)。
buffering : 如果 buffering 的值被設為 0,就不會有寄存。如果 buffering 的值取 1,訪問文件時會寄存行。如果將 buffering 的值設為大於 1 的整數,表明了這就是的寄存區的緩沖大小。如果取負值,寄存區的緩沖大小則為系統默認。
encoding:對文件規定打開的編碼
newline = “”:讀取文件真正的換行符,在window里面為“\r\n”,Linux和Python里面為“\n”
模式
模式 | 描述 |
---|---|
r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
rb | 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。 |
r+ | 打開一個文件用於讀寫。文件指針將會放在文件的開頭。 |
rb+ | 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。 |
w | 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb | 以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
w+ | 打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb+ | 以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
a | 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
ab | 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
a+ | 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。 |
ab+ | 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。 |
file對象
序號 | 方法及描述 |
---|---|
1 | file.close() 關閉文件。關閉后文件不能再進行讀寫操作。 |
2 | file.flush() 刷新文件內部緩沖,直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待輸出緩沖區寫入。 |
3 | file.fileno() 返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上。 |
4 | file.isatty() 如果文件連接到一個終端設備返回 True,否則返回 False。 |
5 | file.next() 返回文件下一行。 |
6 | file.read([size]) 從文件讀取指定的字節數,如果未給定或為負則讀取所有。 |
7 | file.readline([size]) 讀取整行,包括 "\n" 字符。 |
8 | file.readlines([sizehint]) 讀取所有行並返回列表,若給定sizeint>0,則是設置一次讀多少字節,這是為了減輕讀取壓力。 |
9 | file.seek(offset[, whence]) 設置文件當前位置 |
10 | file.tell() 返回文件當前位置。 |
11 | file.truncate([size]) 截取文件,截取的字節通過size指定,默認為當前文件位置。 |
12 | file.write(str) 將字符串寫入文件,返回的是寫入的字符長度。 |
13 | file.writelines(sequence) 向文件寫入一個序列字符串列表,如果需要換行則要自己加入每行的換行符。 |
具體使用
###############只讀模式的使用###############
>>> f = open("C:/Users/DELL/Desktop/test.txt","r",encoding="GBK")
>>> date = f.read() ## 讀出所有的文字
>>> print(date)
>>>date.close() ##每次都要close()儲存
Hello,World!
>>>file_name = "C:/Users/DELL/Desktop/test.txt"
>>>f = open(file_name, "r", encoding = "GBK")
>>>print("First", f.readline()) ## 一列一列的顯示文字
>>>print("Second", f.readline())
>>>print("Third", f.readline())
>>>print("Forth", f.readline())
First Hello,World!
Second I love you!
Third You are so beautiful!
Forth HaaaaHaaa!
>>>file_name = "C:/Users/DELL/Desktop/test.txt"
>>>f = open(file_name, "r", encoding = "GBK")
>>>print(f.readlines()) ## 把內容顯示成列表
['Hello,World!\n', 'I love you!\n', 'You are so beautiful!\n', 'HaaaaHaaa!\n', 'Are you ok?\n']
###############只讀模式和追加模式的使用###############
>>>f = open("test.txt", "w", encoding = "UTF-8") // f = open("test.txt", "a", encoding = "UTF-8")
"""在字符處理里面,w模式會再新建一個文件(會替代原來的文件)來寫入內容,而a模式會添加內容,如果沒有該文件就新建一個"""
>>>print(f.readable())
False ## 在只寫模式下打開的文件不能讀
>>>print(f.writable())
True
>>>f.write("I love you!")
11 ## 顯示其字節數
>>>f.flush() ## 把內存里面的內容加載到磁盤里面
>>>f.writelines(["I love you!\n","You are so good!\n","Thank you very much!\n"]) ## 用列表寫入文字
>>>f.close()
>>>f = open(file_name, "r+", encoding = "GBK") ##為讀寫模式,即可以寫入也可以閱讀
>>>f=open('test.txt','rb') ## 以二進制的方式打開,不能指定編碼
>>>date = f.read()
>>>print(date)
b'\xce\xd2\xcf\xb2\xbb\xb6\xc4\xe3\r\n'
>>>print(date.decode("gbk"))
我喜歡你
>>>f=open('test.txt','wb') // >>>f=open('test.txt','ab') ##在這樣模式下,寫入內容必須先把內容編譯成指定二進制
>>>f.write(bytes("我愛你",encoding = "gbk")) ## 用bytes方法
6
>>>f.flush()
我愛你
>>>f.write("我愛你".encode("gbk")) ##encode方法
6
>>>f.close()
我愛你我愛你
###################################################################################
>>>f.closed #文件如果關閉則返回True
>>>print(f.closed)
True
>>>f.tell() #查看文件處理當前的光標位置
0
#################
fileObject.seek(offset[, whence])
"""可選,默認值為 0。給offset參數一個定義,表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起(必須使用b模式打開),2代表從文件末尾算起"""
>>>f.seek(3) #從開頭開始算,將光標移動到第三個字節
3
>>>print(f.tell())
3
>>>f.seek(3,1)
6
>>>f.seek(3,2)
24
>>>f.seek(-2,2)
19
>>>f.truncate(5) #從開頭開始算,將文件只保留從0-10個字節的內容,文件必須以寫方式打開,但是w和w+除外
5
>>>print(f.read())
I lov
with open方法
with open( ) as variable
這種方式打開的文件將不用使用close()或者flush(),刷入內容
with open("test.txt", "r+") as f:
print(f.read())