1.1文件操作介紹
1.1.1什么是文件
1.1.2文件的作用
大家應(yīng)該聽說過一句話:“好記性不如爛筆頭”斥扛。
不僅人的大腦會遺忘事情,計(jì)算機(jī)也會如此霞揉,比如一個程序在運(yùn)行過程中用了九牛二虎之力終于計(jì)算出了結(jié)果播聪,試想一下如果不把這些數(shù)據(jù)存放起來效诅,相比重啟電腦之后,“哭都沒地方哭了”
可見霎匈,在把數(shù)據(jù)存儲起來有做么大的價值
使用文件的目的:
就是把一些存儲存放起來戴差,可以讓程序下一次執(zhí)行的時候直接使用,而不必重新制作一份铛嘱,省時省力
1.2文件的打開與關(guān)閉
想一想:
如果想用word編寫一份簡歷暖释,應(yīng)該有哪些流程呢?
1.打開word軟件墨吓,新建一個word文件
2.寫入個人簡歷信息
3.保存文件
4.關(guān)閉word軟件
同樣球匕,在操作文件的整體過程與使用word編寫一份簡歷的過程是很相似的
1.打開文件,或者新建立一個文件
2.讀/寫數(shù)據(jù)
3.關(guān)閉文件
1.2.1打開文件
在python帖烘,使用open函數(shù)亮曹,可以打開一個已經(jīng)存在的文件,或者創(chuàng)建一個新文件
open(文件名秘症,訪問模式)
示例如下:
f = open('test.txt','w')
說明:
1.2.2關(guān)閉文件
close( )
示例如下:
#新建一個文件照卦,文件名為:test.txt
f = open('test.txt','w')
#關(guān)閉這個文件
f.close()
1.2.3路徑
1.2.3.1linux
1.2.3.2windows
1.3文件的讀寫
1.3.1寫數(shù)據(jù)(write)
使用write()可以完成向文件寫入數(shù)據(jù)
demo:
f = open('test.txt','w')
f.write('hello
world, i am here!')
f.close()
注意:
·如果文件不存在那么創(chuàng)建,如果存在那么就先清空乡摹,然后寫入數(shù)據(jù)
1.3.2讀數(shù)據(jù)(read)
使用read(num)可以從文件中讀取數(shù)據(jù)役耕,num表示要從文件中讀取的數(shù)據(jù)的長度(單位是字節(jié)),如果沒有傳入num聪廉,那么就表示讀取文件中所有的數(shù)據(jù)
demo:
f = open('test.txt','r')
content =
f.read(5)
print(content)
print("-"*30)
content =f.read()
print(content)
f.close()
注意:
·如果open是打開一個文件蹄葱,那么可以不用謝打開的模式,即只寫open('test.txt')
·如果使用讀了多次锄列,那么后面讀取的數(shù)據(jù)是從上次讀完后的位置開始的
1.3.3讀數(shù)據(jù)(readlines)
就像read沒有參數(shù)時一樣图云,readlines可以按照行的方式把整個文件中的內(nèi)容進(jìn)行一次性讀取,并且返回的是一個列表邻邮,其中每一行的數(shù)據(jù)為一個元素
f = open('test.txt','r')
content =f.readlines()
print(type(content))
i=1
fortempincontent:
print("%d:%s"%(i,temp))
i+=1
f.close()
1.3.4讀數(shù)據(jù)(readline)
f = open('test.txt','r')
content =f.readline()
print("1:%s"%content)
content =f.readline()
print("2:%s"%content)
f.close()
讀文件的時候竣况,指針在移動
想一想:
如果一個文件很大,比如5G筒严,試想應(yīng)該怎樣把文件的數(shù)據(jù)讀取到內(nèi)存然后進(jìn)行處理呢丹泉?
1.4應(yīng)用1:制作文件的備份
任務(wù)描述:
輸入文件的名字情萤,然后程序自動完成對文件進(jìn)行備份
參考代碼:
oldFileName = input("請輸入要拷貝的文件名字:")
oldFile = open(oldFileName,'r')
#如果打開文件
ifoldFile:
#提取文件的后綴
fileFlagNum = oldFileName.rfind('.')
iffileFlagNum >0:
fileFlag = oldFileName[fileFlagNum:]
#組織新的文件名字
newFileName = oldFileName[:fileFlagNum] +'[復(fù)件]'+ fileFlag
#創(chuàng)建新文件
newFile = open(newFileName,'w')
#把舊文件中的數(shù)據(jù),一行一行的進(jìn)行復(fù)制到新文件中
forlineContentinoldFile.readlines():
newFile.write(lineContent)
#關(guān)閉文件
oldFile.close()
newFile.close()
1.5文件的隨機(jī)讀寫
1.5.1獲取當(dāng)前讀寫的位置
在讀寫文件的過程中摹恨,如果想知道當(dāng)前的位置筋岛,可以使用tell()來獲取
#打開一個已經(jīng)存在的文件
f = open("test.txt","r")
str = f.read(3)
print("讀取的數(shù)據(jù)是: ", str)
#查找當(dāng)前位置
position = f.tell()
print("當(dāng)前文件位置: ", position)
str = f.read(3)
print("讀取的數(shù)據(jù)是: ", str)
#查找當(dāng)前位置
position = f.tell()
print("當(dāng)前文件位置: ", position)
f.close()
1.5.2定位到某個位置
如果在讀寫文件的過程中,需要從另外一個位置進(jìn)行操作的話晒哄,可以使用seek()
seek(offset, from)有2個參數(shù)
1.offset:偏移量
2.from:方向
a)0:表示文件開頭
b)1:表示當(dāng)前位置
c)2:表示文件末尾
demo:把位置設(shè)置為:從文件開頭睁宰,偏移5個字節(jié)
#打開一個已經(jīng)存在的文件
f = open("test.txt","r")
str = f.read(30)
print("讀取的數(shù)據(jù)是: ", str)
#查找當(dāng)前位置
position = f.tell()
print("當(dāng)前文件位置: ", position)
#重新設(shè)置位置
f.seek(5,0)
#查找當(dāng)前位置
position = f.tell()
print("當(dāng)前文件位置: ", position)
f.close()
demo:把位置設(shè)置為:離文件末尾,3字節(jié)處
#打開一個已經(jīng)存在的文件
f = open("test.txt","r")
#查找當(dāng)前位置
position = f.tell()
print("當(dāng)前文件位置: ", position)
#重新設(shè)置位置
f.seek(-3,2)
#讀取到的數(shù)據(jù)為:文件最后3個字節(jié)數(shù)據(jù)
str = f.read()
print("讀取的數(shù)據(jù)是: ", str)
f.close()
1.6文件的重命名寝凌、刪除
有些時候柒傻,需要對文件進(jìn)行重命名、刪除等一些操作较木,python的os模塊中都有這么功能
1.6.1文件重命名
os模塊中的rename()可以完成對文件的重命名操作
rename(需要修改的文件名,新的文件名)
importos
os.rename("畢業(yè)論文.txt","畢業(yè)論文-最終版.txt")
1.6.2刪除文件
os模塊中的remove()可以完成對文件的刪除操作
remove(待刪除的文件名)
importos
os.remove("畢業(yè)論文.txt")