Python文件操作

在python中對于文件操作有讀和寫,訪問文件的模式有兩種,文本模式和二級制模式。

文件打開操作

打開文件會用到open()函數(shù),語法為:

open(name[,mode[,buffering]])

open函數(shù)()的文件名是必須的,而模式和緩沖參數(shù)都是可選的:

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
示例:

創(chuàng)建一個hello.txt文件,然后加入內容“hello world”,如下所示:

f = open(file='./hello.txt')
result = f.read()
print(result )  # 輸出: hello world
f.close()
  • buffering:是指緩沖大小,-1表示默認大小4096,0表示關閉緩沖區(qū), encoding表示編碼方式,None表示默認的編碼方式;
  • errors:表示編碼錯誤被捕獲,如果是errors=ignore,那么出現(xiàn)編碼錯誤將會被忽略;
  • newline:表示文件換行的意思;
  • closefd:表示是否關閉文件時同時關閉文件描述符;

mode模式參數(shù)常用值有哪些

  • 'r':只讀;

  • 'w':只寫,從開頭開始寫,所以會覆蓋文件的內容;

  • 'a':追加,不會覆蓋文件內容;

  • 'x':只寫,如果文件不存在則創(chuàng)建文件,以只寫方式打開文件,保護寫;

  • 'b':二進制;

  • 't':文本,是默認的模式,可以不寫,一般都是以文本模式打開文件;

  • '+':讀寫;

  • 'r+':給只讀賦予寫的能力;

  • 'w+':給只寫賦予只讀的能力,因為是以只寫的形式打開文件,會清空文件內容,所以不能讀取到內容,只是有了讀的功能;

文件讀取

讀取文件會用到read()函數(shù),用于從文件中讀取指定的字符數(shù),如果未給定或為負值則表示讀取所有字符。 如果文件非常大,尤其是大于內存時,無法使用read()方法。

示例:
f = open(file='./hello.txt',mode='w')
result = f.read()
print(result)   # 輸出: hello world

# 如果此時向文件寫入內容則會報錯,因為此時是只讀模式
f.write('a')  

# 表示文件讀三個字節(jié),不給值表示直接讀到EOF
result1 = f.read(3)  
print(result1)   # 輸出:hel

# 讀取完文件一定要關閉
f.close()   

文件寫入

  • w,x,a都是只寫,t模式是字符流,按照字符編碼理解,b是字節(jié)流,字節(jié)操作是bytes類型。
  • + 無法單獨使用,用來增強r,w,xa等功能,但是在獲取文件對象是依然是本身的特性。
# w為只寫模式
f = open(file='./hello.txt', mode='w')
f.write('a')
f.read() # 此時讀就會報錯
f.close()

# x是只寫,文件不存在,創(chuàng)建文件,以只寫方式打開
f = open('./test.txt', 'x')
# f.read() # 此時讀會報錯
f.write('a')
f.close()

# a只寫,文件存在,追加內容,文件不存在,只寫,追加內容
f = open('./test1.txt', 'a')
# f.read() # 此時讀會報錯
f.write('aaa')
f.close()

文件指針

  • mode為r的時候,指針的起始點在0。

  • mode為a的時候,指針的起始點在EOF,文件末尾。

  • tell()函數(shù):顯示指針的當前位置。

  • seek()函數(shù):移動文件指針的位置,參數(shù)offset指的是偏移的字節(jié)。

  • flush()函數(shù):將緩存刷新到文件。

  • close()函數(shù):關閉文件。

示例:
f = open('hello.txt', 'r+')
print(f.tell()) # 文件的起始位置 0
print(f.read()) # 讀文件所有的內容
print(f.tell()) # EOF,也就是最后一個字符是幾
print(f.seek(3)) # 偏移兩個字節(jié)
print(f.read())
f.close()

f = open('test.txt', 'rb+')
print(f.tell()) # 文件的起始位置0
print(f.read()) # 讀文件所有的內容
print(f.tell()) # EOF,也就是最后一個字符
print(f.seek(2)) # 偏移兩個字節(jié)
print(f.read())

f.write(b'ni hao')
# 二級制模式下,seek(offset, whence=0) 可以給whence傳遞1, 2 或 0, 0表示文件從頭開始, 1表示從當前位置開始,2表示從文件末尾EOF開始
f.seek(2,2) 
f.seek(1,1)
f.write(b'ni hao')
f.flush() # 將緩存刷新到文件
f.write(b'ni hao')
f.close() # 文件句柄關閉的時候,會將緩存刷新到文件

文件行讀取

readline() 函數(shù)用于從文件讀取整行(包括 "\n" 字符),如果指定了一個非負數(shù)的參數(shù),則返回指定大小的字節(jié)數(shù)(包括 "\n" 字符)。
readlines() 函數(shù)用于讀取所有行,且返回值為列表形式。

import io
f = open('hello.txt', 'r+')
print(io.DEFAULT_BUFFER_SIZE) # 8192
print(f.readline(), '第一行')  # 讀取一行
print(f.readline(), '第二行')
print(f.readlines())          # 讀取所有行,且返回列表

open 文件上下文管理器

我們可以使用with 關鍵字來實現(xiàn)上下文管理器,通過上下文管理的方式打開文件,在文件末尾會自動執(zhí)行關閉語句,不需要寫f.close()來關閉文件了。

with open('test.txt',mode='w') as f:
    f.write('nihao')

參考:俠課島(9xkd.com)Python同學計劃

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 文件操作: 打開文件:Python內置了一個打開文件的函數(shù),open()函數(shù),用來打開一個文件,返回新打開文件的描...
    往日_07ae閱讀 586評論 0 0
  • 一、 簡述 在Python3里提供了open函數(shù)來對文件操作,Python2中有file函數(shù) 。 二、打開文件的模...
    花間派I風月閱讀 368評論 0 2
  • Python文件操作 準備工作: 1) 使用python來讀取文件是非常簡單的操作,我們使用open()函數(shù)來打開...
    小學弟_閱讀 578評論 0 0
  • 目標 文件的概念 文件的基本操作 文件/文件夾的常用操作 文本文件的編碼方式 01. 文件的概念 1.1 文件的概...
    __元昊__閱讀 240評論 0 1
  • 很無助,很彷徨 害怕接下來的每一天,亦害怕孤獨的旅程 時間總是讓我們無法理解對于每一件事情的解決方法 一年過去了,...
    一葉扁舟9627閱讀 882評論 0 0

友情鏈接更多精彩內容