17

——文件的其他操作——

我們之前提到的,文件讀一遍之后,文件指針的位置就停留在了文件的末尾赏寇,這時(shí)候如果再進(jìn)行讀取文件,會(huì)發(fā)現(xiàn)讀取不到任何的內(nèi)容价认。那么怎么知道文件指針的位置呢嗅定?

①語法:f.tell()

tell()方法返回文件的當(dāng)前位置,即文件指針當(dāng)前位置用踩。

文件在什么也沒操作的時(shí)候渠退,文件指針的位置是0。

我們對(duì)文件讀取一行之后脐彩,文件的指針位置就發(fā)生了變化碎乃,按照字符進(jìn)行計(jì)數(shù)。

在這里如果用f.read()進(jìn)行讀取惠奸,再對(duì)f.read()說明一下:

語法:f.read(size)? ? ? ? ? ?

參數(shù):size?-- 從文件中讀取的字節(jié)數(shù)

read()?方法用于從文件讀取指定的字節(jié)數(shù)梅誓,如果未給定或?yàn)樨?fù)則讀取所有。

那么怎么解決之前所說的問題呢晨川,怎樣讓指針重新回到指定位置呢证九?

②語法:f.seek(offset[, whence])

參數(shù):offset?-- 開始的偏移量删豺,也就是代表需要移動(dòng)偏移的字節(jié)數(shù)

? ? ? ? ? whence:可選共虑,默認(rèn)值為 0。給offset參數(shù)一個(gè)定義呀页,表示要從哪個(gè)位置開始偏移妈拌;0代表從文件開頭開始算起,1代表從當(dāng)前位置開始算起蓬蝶,2代表從文件末尾算起尘分。

比如,我從文件的開頭先開始讀取一行丸氛,然后打印出此時(shí)文件指針的位置培愁,然后我再讓文件指針回到0的位置,再讀取一行缓窜,打印此時(shí)文件指針的位置定续。按道理說谍咆,我讓文件指針回到0的位置之后,我再打印一行應(yīng)該是文件的第一行私股。我們來看一下結(jié)果是不是這樣:

確實(shí)是這樣摹察。如果是回到任意位置,打印一行倡鲸,我們看一下結(jié)果:

③語法:f.encoding? (注意:后面沒有括號(hào))

f.encoding可以知道文件的編碼方式供嚎,一般為“utf-8”。

④語法:f.fileno()

fileno()?方法返回一個(gè)整型的文件描述符(file descriptor FD 整型)峭状,可用于底層操作系統(tǒng)的 I/O 操作克滴。

也就是說fileno()返回的是文件句柄的編號(hào)

在這里再說明一下“文件句柄”:在文件I/O中优床,要從一個(gè)文件讀取數(shù)據(jù)偿曙,應(yīng)用程序首先要調(diào)用操作系統(tǒng)函數(shù)并傳送文件名,并選一個(gè)到該文件的路徑來打開文件羔巢。該函數(shù)取回一個(gè)順序號(hào)望忆,即文件句柄(file handle),該文件句柄對(duì)于打開的文件是唯一的識(shí)別依據(jù)竿秆。要從文件中讀取一塊數(shù)據(jù)启摄,應(yīng)用程序需要調(diào)用函數(shù)ReadFile,并將文件句柄在內(nèi)存中的地址和要拷貝的字節(jié)數(shù)傳送給操作系統(tǒng)幽钢。當(dāng)完成任務(wù)后歉备,再通過調(diào)用系統(tǒng)函數(shù)來關(guān)閉該文件。

⑤語法:f.flush()

flush是刷新的意思匪燕,當(dāng)我們以寫的模式打開文件的時(shí)候蕾羊,我們?cè)趯懭胍恍袝r(shí),如果此時(shí)突然斷電帽驯,這一行就可能沒有寫進(jìn)硬盤中龟再,因?yàn)槲募谧x寫的時(shí)候有一個(gè)緩存的機(jī)制,斷電的時(shí)候可能內(nèi)容還在內(nèi)存的緩存中尼变,并沒有寫到硬盤里利凑。硬盤的讀寫速度是比內(nèi)存慢的。內(nèi)存是等待寫幾行嫌术,等到內(nèi)存的緩存滿了之后哀澈,再一起寫到硬盤中,這個(gè)內(nèi)存的緩存一般很小度气。

那么我們?cè)趺幢WC我們寫一行割按,這一行就能寫到了硬盤中?

這時(shí)候就用到了強(qiáng)制刷新磷籍。

flush()?方法是用來刷新緩沖區(qū)的适荣,即將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件丙躏,同時(shí)清空緩沖區(qū),不需要是被動(dòng)的等待輸出緩沖區(qū)寫入束凑。

一般情況下晒旅,文件關(guān)閉后會(huì)自動(dòng)刷新緩沖區(qū),但有時(shí)你需要在關(guān)閉前刷新它汪诉,這時(shí)就可以使用 flush() 方法废恋。

我們來實(shí)踐一下:

我們以“w”的方式打開一個(gè)名為“test.text”的文件,并且寫進(jìn)去“星期一”扒寄。

可以看到鱼鼓,名為“test”的text文件中沒用任何內(nèi)容。

用f.flush()強(qiáng)制刷新一下该编。

可以看到迄本,星期一就被寫進(jìn)去了。

我們?cè)俳又鴮憽靶瞧诙薄?/p>

一樣的课竣,“星期二”沒有被寫進(jìn)去嘉赎。

再用f.flush()刷新一下。

“星期二”就被寫進(jìn)去了于樟。

⑥語法:f.truncate()

truncate()?方法用于截?cái)辔募酰绻付丝蛇x參數(shù) size,則表示截?cái)辔募?size 個(gè)字符迂曲。 如果沒有指定 size靶橱,則從當(dāng)前位置起截?cái)啵唤財(cái)嘀?size 后面的所有字符被刪除路捧。

#指定參數(shù)size——截?cái)辔募閟ize個(gè)字符

#不指定參數(shù)size——從當(dāng)前位置起关霸,截?cái)嗪竺嫠械淖址?/p>

#如果文件是“w”模式,則文件指針的位置在開始的地方杰扫,f.truncate()之后队寇,則會(huì)清空所有的內(nèi)容。

#如果文件是“a”模式涉波,文件指針的位置在文件的末尾英上,f.truncate()之后,對(duì)于文件來說啤覆,沒什么變化。

⑦語法:f.close()

close()?方法用于關(guān)閉一個(gè)已打開的文件惭聂。關(guān)閉后的文件不能再進(jìn)行讀寫操作窗声, 否則會(huì)觸發(fā)?ValueError?錯(cuò)誤。 close() 方法允許調(diào)用多次辜纲。當(dāng) file 對(duì)象被引用到操作另外一個(gè)文件時(shí)笨觅,Python 會(huì)自動(dòng)關(guān)閉之前的 file 對(duì)象拦耐。使用 close() 方法關(guān)閉文件是一個(gè)好的習(xí)慣。

⑧語法:f.closed? ? ? ?(注意:沒有括號(hào))

判斷一個(gè)文件是否關(guān)閉见剩。關(guān)閉的話返回True杀糯,沒有關(guān)閉的話返回False。

⑨語法:f.name

f.name是打印文件的文件名苍苞。

(10)語法:f.errors

f.errors是打印文件的報(bào)錯(cuò)級(jí)別固翰。

(11)語法:f.isatty()

isatty()?方法檢測(cè)文件是否連接到一個(gè)終端設(shè)備,如果是返回 True羹呵,否則返回 False骂际。

(12)語法:f.mode

打印文件的模式。

(13)語法:f.readable()

判斷文件是否可讀冈欢。

(14)語法:f.seekable()

判斷文件是否可以使文件指針偏移歉铝。

(15)語法:f.writable()

判斷文件是否可寫。

(16)語法:f.writelines()

writelines()?方法用于向文件中寫入一序列的字符串凑耻。

這一序列字符串可以是由迭代對(duì)象產(chǎn)生的太示,如一個(gè)字符串列表。

換行需要制定換行符 \n香浩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末先匪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弃衍,更是在濱河造成了極大的恐慌呀非,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镜盯,死亡現(xiàn)場(chǎng)離奇詭異岸裙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)速缆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門降允,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艺糜,你說我怎么就攤上這事剧董。” “怎么了破停?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵翅楼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我真慢,道長(zhǎng)毅臊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任黑界,我火速辦了婚禮管嬉,結(jié)果婚禮上皂林,老公的妹妹穿的比我還像新娘。我一直安慰自己蚯撩,他們只是感情好础倍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胎挎,像睡著了一般沟启。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呀癣,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天美浦,我揣著相機(jī)與錄音,去河邊找鬼项栏。 笑死浦辨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沼沈。 我是一名探鬼主播流酬,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼列另!你這毒婦竟也來了芽腾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤页衙,失蹤者是張志新(化名)和其女友劉穎摊滔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體店乐,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艰躺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眨八。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腺兴。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖廉侧,靈堂內(nèi)的尸體忽然破棺而出页响,到底是詐尸還是另有隱情,我是刑警寧澤段誊,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布闰蚕,位于F島的核電站,受9級(jí)特大地震影響枕扫,放射性物質(zhì)發(fā)生泄漏陪腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一烟瞧、第九天 我趴在偏房一處隱蔽的房頂上張望诗鸭。 院中可真熱鬧,春花似錦参滴、人聲如沸强岸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝌箍。三九已至,卻和暖如春暴心,著一層夾襖步出監(jiān)牢的瞬間妓盲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工专普, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悯衬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓檀夹,卻偏偏與公主長(zhǎng)得像筋粗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炸渡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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