總目錄:http://www.reibang.com/p/e406a9bc93a9
Python - 子目錄:http://www.reibang.com/p/50b432cb9460
新建txt文件“測試1.txt”间护,“測試2.txt”存放于pycharm項目根目錄创夜,測試1.txt文件內(nèi)存放有《望廬山瀑布》正文。
三種基本的操作模式? r(只讀)? w(只寫) a(追加)
流程:1 創(chuàng)建文件對象 2 調(diào)用文件方法進(jìn)行操作 3 關(guān)閉文件
r(只讀)
a=open('測試1.txt','r')? ? ? ? ? #打開文件矿瘦,選擇打開方式為只讀
data1=? a.read()? ? ? ? ? ? ? ? ? #讀取文件內(nèi)容,讀取方法為全部讀取底哥。
print(data1)? ? ? ? ? ? ? ? ? ? #打印讀取內(nèi)容谴分。
日照香爐生紫煙,
遙看瀑布掛前川讼育。
飛流直下三千尺,
疑是銀河落九天粮宛。
data2=? a.read(5)? ? ? ? ? ? ? ? #讀取文件內(nèi)容的前五個字符窥淆。
print(data2)? ? ? ? ? ? ? ? ? ? #打印讀取內(nèi)容。
日照香爐生
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
w(只寫)
a=open('測試2.txt','w')? ? ? ? ? ? ? ? ? ? ? ? #打開文件巍杈,選擇打開方式為只寫
a.write("日照香爐生紫煙忧饭,")? ? ? ? ? ? ? ? #寫入文件,文件內(nèi)原內(nèi)容清空筷畦。
data1=a.read()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
print(data1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#打印讀取內(nèi)容词裤,查看是否寫入。
日照香爐生紫煙鳖宾,
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
a(追加)
a=open('測試2.txt','a')? ? ? ? ? ? ? ? ? ? ? ? #打開文件吼砂,選擇打開方式為追加
a.write("\n遙看瀑布掛前川。\n")? ? ? ? ?#寫入文件鼎文,追加到源文件尾部渔肩。
data1=a.read()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
print(data1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#打印讀取內(nèi)容,查看是否寫入拇惋。
日照香爐生紫煙周偎,
遙看瀑布掛前川。
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
其他方法
fileno()?
文件描述符方法(文件操作句柄的標(biāo)識符撑帖,不為零但唯一)在某一時間段內(nèi)只能有一個操作進(jìn)程使用蓉坎。
a=open('測試2.txt','w')? ? ? ? ? ? ? ? ? ? ? ? #打開文件,選擇打開方式為只寫
print(a.fileno())? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看此文件文件描述符
3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#此文件在此電腦上此次操作的標(biāo)識符為3
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
readline()
讀取一行(讀取到第一個/n換行符處)
a=open('測試1.txt','r')? ? ? ? ? #打開文件胡嘿,選擇打開方式為只讀
data1=? a.readline()? ? ? ? ? ? #讀取文件內(nèi)容蛉艾,讀取第一行
print(data1)? ? ? ? ? ? ? ? ? ? #打印讀取內(nèi)容。
日照香爐生紫煙,
data2=? a.readline()? ? ? ?
#接著上一個readline后再操作一個則會讀取第二行(因為第一個readline操作后標(biāo)識到第二行處)
print(data2)? ? ? ? ? ? ? ? ? ? #打印讀取內(nèi)容勿侯。
遙看瀑布掛前川拓瞪。
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件?
redlines()
讀取所有行
a=open('測試1.txt','r')? ? ? ? ? #打開文件,選擇打開方式為只讀
data1=? a.readlines()? ? ? ? ? ? #讀取文件內(nèi)容罐监,讀取第一行
print(data1)? ? ? ? ? ? ? ? ? ? #打印讀取內(nèi)容吴藻。
日照香爐生紫煙,
遙看瀑布掛前川弓柱。
飛流直下三千尺,
疑是銀河落九天侧但。
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
指定在一行尾部添加字符
迭代器方法
f=open('測試1.txt','r',encoding='UTF-8')
number=0
for i in f:
? ? number+=1
? ? if number == 3:
? ? ? ? i = ''.join([i.strip(), 'iiiii'])
? ? print(i.strip())
f.close()
日照香爐生紫煙矢空,
遙看瀑布掛前川。
飛流直下三千尺禀横,iiiii
疑是銀河落九天屁药。
tell()
返回光標(biāo)當(dāng)前位置
a=open('測試1.txt','r')? ? ? ? ? #打開文件,選擇打開方式為只讀
print(a.tell())? ? ? ? ? ? ? ? ? ?#打印當(dāng)前光標(biāo)位置
0
data1=? a.read(2)? ? ? ?#讀取兩個字符(中文一個字符兩個位置柏锄,英文一個酿箭。)
print(a.tell())? ? ? ? ? ? ? ? ? ?#打印當(dāng)前光標(biāo)位置
6
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
seek()??
指定光標(biāo)的位置
a=open('測試1.txt','r')? ? ? ? ? #打開文件,選擇打開方式為只讀
print(a.read(2))? ? ? ? ? ? ? ?#讀取兩個字符
日照
print(a.read(2))? ? ? ? ? ? ? ?#再讀取兩個字符
香爐
a.seek(0)? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#把光標(biāo)位置設(shè)置在0
print(a,read(2))? ? ? ? ? ? ? ? ?#再讀取兩個字符查看光標(biāo)是否設(shè)置成功
日照
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
truncate()
指定長度的話趾娃,就從文件的開頭開始截斷指定長度缭嫡,其余內(nèi)容刪除;不指定長度的話抬闷,就從文件開頭開始截斷到當(dāng)前位置妇蛀,其余內(nèi)容刪除。
a=open('測試1.txt','r+')? ? ? ?#打開文件笤成,選擇打開方式為讀寫
a.truncate(6)? ? ? ? ? ? ? ? ? ? ? ? ? ? #截取6個字符
a.close? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關(guān)閉文件
這時打開文件測試1.txt,發(fā)現(xiàn)只有日照香三個字评架。
flush
刷新緩沖區(qū),即將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件炕泳,同時清空緩沖區(qū)纵诞,不需要是被動的等待輸出緩沖區(qū)寫入。
#進(jìn)度條實例
import sys,time
for i in range(30):
? ? sys.stdout.write("*")
? ? sys.stdout.flush()
? ? time.sleep(0.1)
#print的flush
import sys,time
for i in range(30):
? ? print('*',end='',flush=True)
? ? time.sleep(0.1)
終極問題 如何在磁盤修改文件
常規(guī)思路培遵,由于磁盤存儲機(jī)制不能完成
f=open('小重山.txt','r+',encoding='utf8')
number=0
for line in f:
? ? number+=1
? ? if number==3:
? ? ? ? f.write('alex')
只能采取重新創(chuàng)建一個文件的思路
f_read=open('小重山.txt','r',)
f_write = open('小重山2.txt','w',encoding='utf8')
number=0
? ? for line in f_read:
? ? ? ? number+=1
? ? ? ? if number==6:
? ? ? ? ? ? line=''.join([line.strip(),'alex\n'])
? ? ? ? ? ? # line='hello 岳飛\n'
? ? f_write.write(line)