Python基礎(chǔ)文件處理
python系列文檔都是基于python3
一绰筛、字符編碼
在python2默認(rèn)編碼是ASCII, python3里默認(rèn)是utf-8;
unicode分為 utf-32(占4個(gè)字節(jié)),utf-16(占兩個(gè)字節(jié)),utf-8(占1-4個(gè)字節(jié))敞曹, so utf-8就是unicode;
在py3中encode,在轉(zhuǎn)碼的同時(shí)還會(huì)把string 變成bytes類型,decode在解碼的同時(shí)還會(huì)把bytes變回string;
內(nèi)存固定使用Unicode編碼殊者,硬盤的編碼可以修改(即可以修改的軟件編碼);
使用什么編碼往硬盤存拍顷,就用什么編碼去讀;
程序運(yùn)行分兩個(gè)階段:
- 從硬盤讀到內(nèi)存
- python解釋器運(yùn)行讀到內(nèi)存里的代碼針對(duì).py文件,python與nodpad++\vim的區(qū)別是多了運(yùn)行已經(jīng)讀到內(nèi)存里的代碼.
二坪它、文件處理
- open函數(shù)操作
- 第一個(gè)參數(shù):文件名路徑和名稱
- 第二個(gè)參數(shù):mode,文件打開(kāi)的方式
f = open('filename', 'mode')
f.close()
- 模式
模式 | 操作 | 說(shuō)明 |
---|---|---|
r | 只讀(read-only) | 默認(rèn)模式帝牡,以只讀方式打開(kāi)文件往毡,如果文件不存在就報(bào)錯(cuò),存在就正常讀取 |
w | 寫(write) | 如果文件不存在靶溜,新建文件然后寫入开瞭;如果存在,先清空文件內(nèi)容罩息,再寫入 |
a | 追加(append) | 如果文件不存在嗤详,新建文件然后寫入;如果存在瓷炮,在文件的最后追加寫入 |
x | 創(chuàng)建 | 如果文件存在則報(bào)錯(cuò)葱色,如果不存在就新建文件,然后寫入內(nèi)容娘香,比w模式更安全 |
b | 二進(jìn)制方式 | binary方式苍狰,二進(jìn)制寫入;比如rb烘绽、wb淋昭、ab,以bytes類型操作數(shù)據(jù) |
+ | 讀寫 | 可讀又可寫雙模式安接;比如r+翔忽、w+、a+ |
#r,讀模式盏檐,open命令默認(rèn)是讀模式
f = open('testfile','r',encoding='utf-8')
print(f.read())
#w,寫模式呀打,如果沒(méi)有文件會(huì)創(chuàng)建
f = open('testfile','w',encoding='utf-8')
f.write('人生苦短,我學(xué)python\n')
f.close()
#a,追加模式
f = open('testfile','a',encoding='utf-8')
f.write('keep keep !\n')
f.close()
#r+,讀寫 可讀糯笙,追加內(nèi)容到最后
f = open('testfile','r+',encoding='utf-8')
f.readline()
f.write('devops\n')
#w+,寫讀 新建文件,寫入再讀取
f = open('testfile','w+',encoding='utf-8')
f.readline()
f.write('devops2\n')
# a+,追加讀 清空源文件撩银,再添加给涕,然后讀取
f = open('testfile','w+',encoding='utf-8')
f.readline()
f.write('devops3\n')
#刪除,打開(kāi)一個(gè)文件寫入空即刪除
f = open('testfile','r+',encoding='utf-8')
f.readline()
f.write('')
- 文件處理方法
f = open('testfile','w+',encoding='utf-8')
f.close()
f.closed #判斷操作的文件是否關(guān)閉
f.encoding #打印文件的編碼格式
f.fileno() #返回操作系統(tǒng)接口文件索引<網(wǎng)絡(luò)編程,I/O復(fù)用>
f.flush() #刷新操作
f.isatty() #判斷打開(kāi)的文件是否是終端文件
f.name #打印文件名
f.newlines #未讀取到行分隔符時(shí)為 None,只有一種行分隔符時(shí)為一個(gè)字符串,當(dāng)文件有多種類型的行結(jié)束符時(shí),則為一個(gè)包含所有當(dāng)前所遇到的行結(jié)束符的列表
f.readable() #同isatty類似
f.seek() #移動(dòng)光標(biāo)够庙,到固定位置返回此位置以后的內(nèi)容(按照字符移)
f.tell() #打印光標(biāo)所在位置的索引
f.truncate() #截?cái)喙вΓ浜蟬eek,括號(hào)內(nèi)指定保留字符數(shù)量耘眨,從頭開(kāi)始切
f.writelines() #寫列表到文件
- with語(yǔ)句
- with語(yǔ)句是一種上下文管理協(xié)議技術(shù)(ContextManagemenProtocal)
- 自動(dòng)判斷文件的作用域昼榛,自動(dòng)關(guān)閉已打開(kāi)且不在使用的文件句柄
#readline函數(shù),一行一行讀取 with open(r'test.txt','r',encoding='utf-8') as f: strline = f.readline() while strline: print(strline) strline = f.readline() with open(r'test.txt','r',encoding='utf-8') as f: #以打開(kāi)的文件f作為參數(shù)剔难,創(chuàng)建列表 l = list(f) #打印出列表內(nèi)容 for i in l: print(i)
#read函數(shù)胆屿,是按照字符讀取文件內(nèi)容;默認(rèn)讀取所有 with open('test.txt', 'r', encoding='utf-8') as f: strchar = f.read() print(strchar)