python文件處理
一.文件處理流程
- 打開文件,得到文件句柄並賦值給一個變量
- 通過句柄對文件進行操作
- 關閉文件
二.基本操作
2.1 文件操作基本流程初探
f = open(‘chenli.txt‘) #打開文件 first_line = f.readline() print(‘first line:‘,first_line) #讀一行 print(‘我是分隔線‘.center(50,‘-‘)) data = f.read()# 讀取剩下的所有內容,文件大時不要用 print(data) #打印讀取內容 f.close() #關閉文件
2.2 文件編碼
文件保存編碼如下
此刻錯誤的打開方式
f=open(‘chenli.txt‘,encoding=‘utf-8‘) f.read()
正確的打開方式
#不指定打開編碼,默認使用操作系統的編碼,windows為gbk,linux為utf-8,與解釋器編碼無關
f=open(‘chenli.txt‘,encoding=‘gbk‘) #在windows中默認使用的也是gbk編碼,此時不指定編碼也行
f.read()
2.3 文件打開模式
1 文件句柄 = open(‘文件路徑‘, ‘模式‘)
打開文件時,需要指定文件路徑和以何等方式打開文件,打開後,即可獲取該文件句柄,日後通過此文件句柄對該文件操作。
打開文件的模式有:
- r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
- w,只寫模式【不可讀;不存在則創建;存在則清空內容】
- x, 只寫模式【不可讀;不存在則創建,存在則報錯】
- a, 追加模式【可讀; 不存在則創建;存在則只追加內容】
"+" 表示可以同時讀寫某個文件
- r+, 讀寫【可讀,可寫】
- w+,寫讀【可讀,可寫】
- x+ ,寫讀【可讀,可寫】
- a+, 寫讀【可讀,可寫】
"b"表示以字節的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
註:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼
2.4 文件內置函數flush
flush原理:
- 文件操作是通過軟件將文件從硬盤讀到內存
- 寫入文件的操作也都是存入內存緩沖區buffer(內存速度快於硬盤,如果寫入文件的數據都從內存刷到硬盤,內存與硬盤的速度延遲會被無限放大,效率變低,所以要刷到硬盤的數據我們統一往內存的一小塊空間即buffer中放,一段時間後操作系統會將buffer中數據一次性刷到硬盤)
- flush即,強制將寫入的數據刷到硬盤
滾動條:
import sys,time for i in range(10): sys.stdout.write(‘#‘) sys.stdout.flush() time.sleep(0.2)
2.5 文件內光標移動
註意:read(3)代表讀取3個字符,其余的文件內光標移動都是以字節為單位如seek,tell,read,truncate
整理中
2.6 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
3. 參數mode的基本取值
Character | Meaning |
‘r‘ | open for reading (default) |
‘w‘ | open for writing, truncating the file first |
‘a‘ | open for writing, appending to the end of the file if it exists |
‘b‘ | binary mode |
‘t‘ | text mode (default) |
‘+‘ | open a disk file for updating (reading and writing) |
‘U‘ | universal newline mode (for backwards compatibility; should not be used in new code) |
r、w、a為打開文件的基本模式,對應著只讀、只寫、追加模式;
b、t、+、U這四個字符,與以上的文件打開模式組合使用,二進制模式,文本模式,讀寫模式、通用換行符,根據實際情況組合使用、
常見的mode取值組合
1 r或rt 默認模式,文本模式讀 2 rb 二進制文件 3 4 w或wt 文本模式寫,打開前文件存儲被清空 5 wb 二進制寫,文件存儲同樣被清空 6 7 a 追加模式,只能寫在文件末尾 8 a+ 可讀寫模式,寫只能寫在文件末尾 9 10 w+ 可讀寫,與a+的區別是要清空文件內容 11 r+ 可讀寫,與a+的區別是可以寫到文件任何位置
2.7 上下文管理
with open(‘a.txt‘,‘w‘) as f: pass
with open(‘a.txt‘,‘r‘) as read_f,open(‘b.txt‘,‘w‘) as write_f: data=read_f.read() write_f.write(data)
2.8 文件的修改
import os with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f, open(‘.a.txt.swap‘,‘w‘,encoding=‘utf-8‘) as write_f: for line in read_f: if line.startswith(‘hello‘): line=‘哈哈哈\n‘ write_f.write(line) os.remove(‘a.txt‘) os.rename(‘.a.txt.swap‘,‘a.txt‘)
python文件處理