python---基本知識(shí)21之文件操作

文件介紹:文件其實(shí)沒什么好介紹的缅叠,我們?cè)谄綍r(shí)工作以及使用電腦的時(shí)候,都會(huì)用到各種各樣的文件臀脏,首先劝堪,文件有多種格式,比如.txt,.api,.jpg等等揉稚,都是用來存儲(chǔ)數(shù)據(jù)的幅聘,每種格式有每種格式的存取法則,如果一個(gè)文本文檔用jpg打開肯定是亂碼的窃植,因?yàn)橐?guī)則不一帝蒿;下面開始介紹python的文件操作

python文件操作就和我們平時(shí)用電腦操作文件一樣的,即打開文件巷怜,讀寫文件葛超,關(guān)閉文件;

打開文件:使用的是open()函數(shù)延塑,open函數(shù)有很多接收參數(shù)绣张,最重要的就是文件路徑和操作方式;

文件路徑:分為絕對(duì)路徑和相對(duì)路徑关带;絕對(duì)路徑就是完整的描述文件位置的路徑就是絕對(duì)路徑侥涵,相對(duì)路徑是是從當(dāng)前路徑開始的路徑;

操作方式分為5種:

r:以只讀的方式打開文件宋雏,讀取文件的指針在文件開頭芜飘,如果沒有這個(gè)文件,那么會(huì)報(bào)錯(cuò):如下面代碼磨总,那么file又是什么呢嗦明,file就是打開文件的時(shí)候獲取的一根管道,我們都是通過這跟管道進(jìn)行操作文件蚪燕;通過調(diào)用file的方法read()娶牌,就可以讀出文件的內(nèi)容了奔浅;這個(gè)是打開文件的默認(rèn)方式

file=open('ceshi.text','r')

content=file.read()

w:以只寫的方式打開文件,如果文件不存在會(huì)重新創(chuàng)建一個(gè)新文件诗良,寫的指針在文件的開頭汹桦,所以往里面寫的時(shí)候會(huì)覆蓋文件,

file=open('a.text','w')

file.write('e')

file.close()

a:和w模式差不多鉴裹,也是以只寫的方法打開文件营勤,唯一的區(qū)別就是a模式的指針在文件末尾,所以這種方式往里面寫就會(huì)追加在文件末尾壹罚;

file=open('a.text','a')

file.write('123')

file.close()

在講下一種操作模式之前葛作,我們應(yīng)該先搞清楚,什么是文本文件猖凛,什么是二進(jìn)制文件赂蠢,其實(shí)對(duì)于電腦而言,存放的都是二進(jìn)制數(shù)據(jù)辨泳,那為什么又有這兩種文件呢虱岂,他們的區(qū)別就是在于打開這個(gè)文件的程序?qū)τ诙M(jìn)制的解釋上,其實(shí)文本文件的解碼格式是確定的菠红,就是ASCII或者unicode編碼第岖,而音頻視頻這類文件當(dāng)然不能使用ASCLL這種方式去解碼,解出來的肯定是亂碼试溯,其實(shí)說白了就是你用什么編碼去存蔑滓,你就要用什么編碼去取,文本文件只是一種特殊的二進(jìn)制文件遇绞;也可以這樣說键袱,保存字符的文件就是文本文件,其他全是二進(jìn)制文件摹闽;

b模式:其實(shí)就是binary蹄咖,就是二進(jìn)制模式,比如我們要操作除了文本文件以外的文件付鹿,就用b模式澜汤,其實(shí)就在r,w的后面加一個(gè)b就行:下面的代碼是復(fù)制圖片的一半到另一個(gè)文件

readfile=open('image10.png','rb')

readcontent=readfile.read()

readfile.close()

writefile=open('write.png','wb')

writefile.write(readcontent[0:len(readcontent)//2])

writefile.close()

+模式:就是在前面所有的模式后面寫一個(gè)加號(hào),這種模式和沒寫加號(hào)的模式功能特點(diǎn)都差不多舵匾,也有細(xì)微差別這種模式代表既能讀俊抵,又可以寫,舉個(gè)例子:比如下面這種方式纽匙,我們打開了a.text,然后先讀出內(nèi)容务蝠,這個(gè)時(shí)候指針就到了最后一個(gè)拍谐,再往里面寫的時(shí)候烛缔,就成了追加馏段;

file=open('a.text','r+')

content=file.read()

print(content)

file.write('abcd')

file.close()

定位:就是指我們要讀取或者寫入的時(shí)候,指針的位置践瓷,我們可以從頭開始讀院喜,也可以從當(dāng)前的指針位置,也可以從文件末尾往前面讀晕翠;用的是seek()函數(shù)喷舀,另外tell()函數(shù)是告訴我們指針的位置;比如下面的代碼淋肾,seek()硫麻,第一個(gè)值是offset偏移量,第二個(gè)值是可選的相對(duì)哪個(gè)地方的偏移量樊卓,默認(rèn)是0就是文件開始拿愧,1是當(dāng)前指針,2是末尾指針碌尔;另外需要注意一點(diǎn)就是如果是文本文件的話浇辜,whence就只能是0,1和2只能是二進(jìn)制文件才可以唾戚;

file=open('a.text','rb')

print(file.tell())

file.seek(-4,2)

print(file.tell())

print(file.read())

print(file.tell())

file.close()

讀:就是讀取我們存的內(nèi)容柳洋;

1.使用read(),里面有一個(gè)可選參數(shù)叹坦,意思是需要讀取的字節(jié)數(shù)熊镣,默認(rèn)是文件內(nèi)容長度,下標(biāo)會(huì)自動(dòng)后移:

file=open('a.text','rb')

print(file.tell())

file.seek(-4,2)

print(file.tell())

print(file.read(2))

print(file.tell())

file.close()

2.使用readline()募书,里面也有一個(gè)可選參數(shù)轧钓,默認(rèn)就是一行的字節(jié)數(shù),意思是需要讀取的字節(jié)數(shù)锐膜,下標(biāo)也會(huì)自動(dòng)后移:注:換行占兩個(gè)字節(jié)

file=open('a.text','r')

print('=====',file.tell())

print(file.readline())

print('=====',file.tell())

print(file.readline())

print('=====',file.tell())

print(file.readline(2))

print('=====',file.tell())

3.使用readlines()毕箍,會(huì)自動(dòng)將文件按換行符進(jìn)行處理,返回的是每行組成的一個(gè)列表道盏;我們可以看到下面的結(jié)果就是一個(gè)列表而柑,里面的元素就是每一行的值包括換行符;

file=open('a.text','r')

print(file.readlines())

file.close()

結(jié)果:['123\n', '4\n', '56789']

4.遍歷,我們可以用for in 遍歷file本身帚豪,也可以遍歷通過readlines()返回的列表:首先我們看file是否可以遍歷瓦糕,是檢查file是否是iterrator,檢查出來結(jié)果是是迭代器涩澡,那么我們可以迭代,通過迭代結(jié)果表示坠敷,迭代過程也是按照行進(jìn)行的迭代:也就和我們r(jià)eadlines迭代結(jié)果一樣妙同;

import collections

file=open('a.text','r')

isc=isinstance(file,collections.Iterator)

print(isc)

for i in file:

????print(i,end='')

5.判定是否可讀射富,或者是否可寫:主要是增加程序容錯(cuò)率,通過readable和writable粥帚,able表示能力胰耗;

print(file.readable())

print(file.writable())

注意:我們學(xué)了這么多讀取的方法,那我們什么時(shí)候該使用什么方法呢芒涡,這個(gè)就要根據(jù)文件大小決定了柴灯,如果文件特別大的話,我們肯定不能使用一次性讀取所有文件的方法了费尽,因?yàn)檫@種方法很耗內(nèi)存赠群,這種情況我們就應(yīng)該一行一行的讀,就可以使用readline或者用file這個(gè)迭代器旱幼,當(dāng)文件比較小的時(shí)候乎串,我們就可以一次性讀完,使用read和readlines方法速警;

寫入:就是用的write()函數(shù)叹誉,之前已經(jīng)用過了,只需要知道一點(diǎn)就是write函數(shù)有返回值闷旧,并且這個(gè)返回值就是寫入的字節(jié)數(shù)长豁,我們寫了多少個(gè)字節(jié)進(jìn)去就會(huì)返回多少;

關(guān)閉:close(),其實(shí)他有兩個(gè)作用忙灼,第一是可以釋放系統(tǒng)資源匠襟,第二是可以把緩沖區(qū)的數(shù)據(jù)立馬寫進(jìn)磁盤,比如我們系統(tǒng)只有10根管道该园,那現(xiàn)在10根管道都被使用了酸舍,那在需要使用管道的時(shí)候,是不是就沒了呢里初,就會(huì)等前面的用完了才有管道使用了啃勉,所以我們用完就趕緊釋放,不然占著茅坑不拉屎双妨,系統(tǒng)會(huì)很慢的淮阐,第二點(diǎn),我們?cè)趫?zhí)行寫數(shù)據(jù)的時(shí)候刁品,其實(shí)并不是一執(zhí)行到write就會(huì)立馬往磁盤寫泣特,而是先放入緩沖區(qū),等緩沖區(qū)滿了才往里面寫挑随,或者等一會(huì)才寫入状您,就為了減少io操作次數(shù),說白了也是為了不浪費(fèi)資源,而當(dāng)我們執(zhí)行了close過后就會(huì)立馬把緩沖區(qū)的數(shù)據(jù)寫進(jìn)磁盤膏孟;補(bǔ)充:flush()也可以達(dá)到把緩沖區(qū)的數(shù)據(jù)寫進(jìn)磁盤:

file=open('a.text','w')

file.write('aaa')

file.flush()

file.close()

文件的相關(guān)操作:操作文件是在os模塊下眯分,所以我們應(yīng)該先導(dǎo)入os模塊,然后執(zhí)行各種操作:

1.修改單個(gè)文件夾或者文件骆莹,使用rename():

import os os.rename('alone','busy')

os.rename('a.text','b.text')

2.修改樹狀級(jí)文件:使用renames():

os.renames('busy/busy.text','alone/alone.text')

3.刪除文件:remove()函數(shù)颗搂,如果文件不存在則報(bào)錯(cuò):

os.remove('b.text')

4.刪除文件夾:rmdir担猛,不能遞歸刪除文件夾幕垦,如果文件夾不為空則報(bào)錯(cuò)

os.rmdir('alone')

5.刪除文件夾:removedirs(),遞歸刪除文件夾,如果文件夾不為空則報(bào)錯(cuò)傅联;

os.removedirs('alone/a')

6.創(chuàng)建單個(gè)文件夾:

os.mkdir('a')

7.遞歸創(chuàng)建多個(gè)文件夾:

os.makedirs('v/b')

8.獲取當(dāng)前目錄:

print(os.getcwd())

9.改變默認(rèn)目錄:

os.chdir('v')

10.獲取目錄內(nèi)容列表先改,返回的是列表:其中'./'表示當(dāng)前目錄,‘../’表示上一層目錄蒸走;

print(os.listdir('./'))

print(os.listdir('../'))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仇奶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子比驻,更是在濱河造成了極大的恐慌该溯,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件别惦,死亡現(xiàn)場(chǎng)離奇詭異狈茉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掸掸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門氯庆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扰付,你說我怎么就攤上這事堤撵。” “怎么了羽莺?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵实昨,是天一觀的道長。 經(jīng)常有香客問我盐固,道長屠橄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任闰挡,我火速辦了婚禮锐墙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘长酗。我一直安慰自己溪北,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著之拨,像睡著了一般茉继。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚀乔,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天烁竭,我揣著相機(jī)與錄音,去河邊找鬼吉挣。 笑死派撕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的睬魂。 我是一名探鬼主播终吼,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼氯哮!你這毒婦竟也來了际跪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤喉钢,失蹤者是張志新(化名)和其女友劉穎姆打,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠虽,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幔戏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舔痕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片评抚。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伯复,靈堂內(nèi)的尸體忽然破棺而出慨代,到底是詐尸還是另有隱情,我是刑警寧澤啸如,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布侍匙,位于F島的核電站,受9級(jí)特大地震影響叮雳,放射性物質(zhì)發(fā)生泄漏想暗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一帘不、第九天 我趴在偏房一處隱蔽的房頂上張望说莫。 院中可真熱鬧,春花似錦寞焙、人聲如沸储狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辽狈。三九已至慈参,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刮萌,已是汗流浹背驮配。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留着茸,地道東北人壮锻。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像元扔,于是被迫代替她去往敵國和親躯保。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旋膳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容