python中的文件操作

本系列所記述的是一些基礎(chǔ)知識點(diǎn)中平時(shí)用的比較少的方法。

一、文件的打開模式

x:,獨(dú)占模式,相當(dāng)于w的進(jìn)階模式,在寫入文件已存在時(shí)會觸發(fā) FileExistsError 異常。

a:,附加模式,可以在文件末尾繼續(xù)寫入。

+:可以與其他模式聯(lián)合使用,r+和w+有個(gè)重要區(qū)別,既w+會將原有文件刪除然后從頭開始寫入,r+不會這樣做。

rb:用于讀取非文本的二進(jìn)制數(shù)據(jù),禁用文本相關(guān)功能。

注:1.為保證兼容性, 寫入文件時(shí)最好用系統(tǒng)默認(rèn)換行符os.linesep代替“\n"等字符。

? 2.readlines默認(rèn)識別所有的合法換行符( '\n' 、 '\r' 和 '\r\n' ),但如將關(guān)鍵字參數(shù) newline 設(shè)置為空字符串,如 open(name, newline=''),將會禁止換行;newline也可以任意指定換行符,這樣readlines時(shí)就不會對其他換行符進(jìn)行識別換行,但是在寫入時(shí)會自動將其他換行符替換為指定的換行符。

二、文件的內(nèi)容定位

使用seek方法可以更改文件開始執(zhí)行位置,函數(shù)原型如下:

f.seek(offset, whence)

offset為偏移量的字節(jié)數(shù),可以為負(fù)數(shù);

whence是偏移的參照標(biāo)準(zhǔn):io.SEEK_SET(0)表示相對文件開頭,io.SEEK_SET(1)表示相對文件當(dāng)前位置,io.SEEK_SET(2)表示相對文件末尾。

三、文件的實(shí)時(shí)更新

python通常是先將數(shù)據(jù)寫入緩存,在文件關(guān)閉時(shí)將其保存到文件。

有時(shí)會遇到這樣的情況:在程序運(yùn)行過程中持續(xù)向文件輸出,但是如果程序遇到問題突然崩潰,文件沒有正常關(guān)閉,可能很多內(nèi)容不會被寫入到文件中,這種情況下可以考慮使用flush方法重置緩存(更新文件內(nèi)容)。

需要注意的是,根據(jù)使用的操作系統(tǒng)和設(shè)置, flush可能出于鎖定考慮而禁止其他正在運(yùn)行的程序訪問這個(gè)文件。

四、文件的讀寫操作

  • read:讀取整個(gè)文本;

  • readline:每次讀取一行;

  • readlines:讀取整個(gè)文本,返回的是一個(gè)列表,每行的內(nèi)容作為一個(gè)元素(包括換行符)。

寫入操作與讀取操作相對應(yīng)。

五、文件的迭代

文件實(shí)際上是可迭代的,這意味著可在 for 循環(huán)中直接使用它們來迭代行,例如:

>>> lines = list(open('somefile.txt'))
>>> lines
['First line\n', 'Second line\n', 'Third and final line\n']

也就是說,文件讀入后事實(shí)上是按行分割的可迭代對象。

六、fileinput模塊

一個(gè)python的內(nèi)置模塊,以前還真沒用過,其基本功能是逐行讀入一個(gè)(或多個(gè)文件),主要方法如下:

  • input([files[, inplace[, backup]]]) 幫助迭代多個(gè)輸入流中的行;
  • filename() 返回當(dāng)前文件的名稱;
  • lineno() 返回(累計(jì)的)當(dāng)前行號;
  • filelineno() 返回在當(dāng)前文件中的行號;
  • isfirstline() 檢查當(dāng)前行是否是文件中的第一行;
  • isstdin() 檢查最后一行是否來自 sys.stdin;
  • nextfile() 關(guān)閉當(dāng)前文件并移到下一個(gè)文件;
  • close() 關(guān)閉序列。

fileinput.input()方法既支持直接給定文件參數(shù),也支持在shell等控制臺中以參數(shù)的形式指定文件。

在實(shí)際應(yīng)用中,fileinput.input()只讀取它實(shí)際需要讀取的文本部分,因此在文件較大的時(shí)候,可以用來實(shí)現(xiàn)延遲行迭代。例如:

import fileinput
for line in fileinput.input(filename):
    process(line)

七、os模塊

os是一個(gè)操作系統(tǒng)服務(wù)模塊,寫在這里是因?yàn)槠渥幽Kos.path中包含了很多有關(guān)文件路徑的操作;另外os模塊本身也有很多與路徑目錄相關(guān)的操作。

  • os.sep:路徑分隔符,例如windows中的“\”;
  • os.pathsep:分割不同路徑的分隔符,windows下為“;”,linux下為“:”;
  • os.linesep:文本文件中的換行符(盡量用這個(gè)屬性代替具體的換行符);
  • os.path.split:返回給定路徑的父目錄和當(dāng)前目錄的相對名稱,返回值是列表;
  • os.path.join:使用系統(tǒng)默認(rèn)的分隔符連接路徑。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.能調(diào)用方法的一定是對象,比如數(shù)值、字符串、列表、元組、字典,甚至文件也是對象,Python中一切皆為對象。 s...
    ph_郭先森閱讀 1,055評論 0 0
  • 一.模塊的使用 1.導(dǎo)入模塊 python中一個(gè)py文件就是一個(gè)模塊??梢酝ㄟ^import或者form-impor...
    流逝_a443閱讀 343評論 0 0
  • Python中的文件操作 文件的打開與關(guān)閉 一般操作文件的流程都很簡單: 打開/新建 一個(gè)文件 讀/寫 文件 關(guān)閉...
    DeeJay_Y閱讀 307評論 0 0
  • 一. 打開文件在python,使用open函數(shù),可以打開一個(gè)已經(jīng)存在的文件,或者創(chuàng)建一個(gè)新文件。與其翻譯成打開,...
    Bobi_He閱讀 1,162評論 0 0
  • 之前自己一直是把總結(jié)到的知識經(jīng)驗(yàn)放到ONENOTE上,最近越發(fā)覺得應(yīng)該放到博客上。最近讀到知乎的一篇文章,還是有所...
    非蘇寒閱讀 378評論 0 0

友情鏈接更多精彩內(nèi)容