1. 程式人生 > >Python(day5)文件操作

Python(day5)文件操作

second 速度 引號 day5 blog 區別 返回 我們 log

一、文件處理流程

  1. 打開文件,得到文件句柄並賦值給一個變量
  2. 通過句柄對文件進行操作
  3. 關閉文件

二、文件打開模式

打開文件時,需要指定文件路徑和以何等方式打開文件,打開後,即可獲取該文件句柄,日後通過此文件句柄對該文件操作。

打開文件的模式有:

  • r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
  • w,只寫模式【不可讀;不存在則創建;存在則清空內容】
  • x, 只寫模式【不可讀;不存在則創建,存在則報錯】
  • a, 追加模式【可讀; 不存在則創建;存在則只追加內容】

"+" 表示可以同時讀寫某個文件

  • r+, 讀寫【可讀,可寫】
  • w+,寫讀【可讀,可寫】
  • x+ ,寫讀【可讀,可寫】
  • a+, 寫讀【可讀,可寫】

"b"表示以字節的方式操作

  • rb 或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

註:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼

#r模式,默認模式,文不存在則報錯
1)
 f=open(‘a.txt‘,encoding=‘utf-8‘)
 print(‘first-read:‘,f.read())    #讀文件所有內容
 print(‘seconde-read: ‘,f.read())   #光標在最後一行,第二個打印讀不出內容

2)
 f=open(‘a.txt‘,encoding=‘utf-8‘)
 print(f.readline(),end=‘‘)    #讀文件一行
 print(f.readline(),end=‘‘)


 print(f.readlines())    #讀出文件所有行

 f.close()     #關閉文件

  

#w模式,文不存在則創建,文件存在則覆蓋
f=open(‘a.txt‘,‘w‘,encoding=‘utf-8‘)
f.write(‘1111111\n22222\n3333\n‘)  #\n是換行

#也可以這樣寫
f.writelines([‘111hhh\n‘,‘222aa2\n‘,‘3333\n‘])


f.close()

  

#a模式,文不存在則創建,文件存在不會覆蓋,寫內容是追加的方式寫
 f=open(‘a.txt‘,‘a‘,encoding=‘utf-8‘)
 f.write(‘\n444444\n‘)
 f.write(‘5555555\n‘)
 f.close()

  

#其他方法
# f=open(‘a.txt‘,‘w‘,encoding=‘utf-8‘)
# f.write(‘asdfasdf‘)
# f.flush() #把內存數據刷到硬盤
# f.close()
# print(f.closed) #判斷文件是否關閉
# f.readlines()

  

三、文件內置函數flush

flush原理:

  1. 文件操作是通過軟件將文件從硬盤讀到內存
  2. 寫入文件的操作也都是存入內存緩沖區buffer(內存速度快於硬盤,如果寫入文件的數據都從內存刷到硬盤,內存與硬盤的速度延遲會被無限放大,效率變低,所以要刷到硬盤的數據我們統一往內存的一小塊空間即buffer中放,一段時間後操作系統會將buffer中數據一次性刷到硬盤)
  3. flush即,強制將寫入的數據刷到硬盤

四、open函數詳解

1. open()語法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函數有很多的參數,常用的是file,mode和encoding
file文件位置,需要加引號
mode文件打開模式,見下面3
buffering的可取值有0,1,>1三個,0代表buffer關閉(只適用於二進制模式),1代表line buffer(只適用於文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的數據采用何種編碼,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,當取strict的時候,字符編碼出現問題的時候,會報錯,當取ignore的時候,編碼出現問題,程序會忽略而過,繼續執行下面的程序。
newline可以取的值有None, \n, \r, ”, ‘\r\n‘,用於區分換行符,但是這個參數只對文本模式有效;
closefd的取值,是與傳入的文件參數有關,默認情況下為True,傳入的file參數為文件的文件名,取值為False的時候,file只能是文件描述符,什麽是文件描述符,就是一個非負整數,在Unix內核的系統中,打開一個文件,便會返回一個文件描述符。

2. Python中file()與open()區別
兩者都能夠打開文件,對文件進行操作,也具有相似的用法和參數,但是,這兩種文件打開方式有本質的區別,file為文件類,用file()來打開文件,相當於這是在構造文件類,而用open()打開文件,是用python的內建函數來操作,建議使用open

五、上下文管理

#上下文管理with
# read_f=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘)
# write_f=open(‘.a.txt.swp‘,‘w‘,encoding=‘utf-8‘)
#上面兩句可以縮寫成下面一句
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,        open(‘.a.txt.swp‘,‘w‘,encoding=‘utf-8‘) as write_f:
    for line in read_f:
        if ‘alex‘ in line:
            line=line.replace(‘alex‘,‘ALEXSB‘)
        write_f.write(line)
os.remove(‘a.txt‘)
os.rename(‘.a.txt.swp‘,‘a.txt‘)

  

Python(day5)文件操作