python 文件操作

一.文件IO常用操作

方法 含義
open 打開
read 讀取
write 寫入
close 關(guān)閉
readline 單行讀取
readlines 多行讀取
seek 文件指針操作
tell 讀取當(dāng)前指針位置

二.open

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
創(chuàng)建并打開一個文件test,然后關(guān)閉
打開一個文件,返回一個文件對象(流對象)和文件描述符掂摔。
打開文件失敗,則返回異常姑蓝。

#touch test   #linux
#New-Item "new test.txt" -type File   #powershell 
f = open("test") # file對象
# windows <_io.TextIOWrapper name='test' mode='r' encoding='cp936'> # linux <_io.TextIOWrapper name='test' mode='r' encoding='UTF-8'> print(f.read()) # 讀取文件
f.close() # 關(guān)閉文件

1.open參數(shù)詳解

① file

打開或者要創(chuàng)建的文件名,如果不指定路徑维贺,默認是當(dāng)前路徑
或者是文件描述符(整型)

② mode

文件打開的模式它掂。默認以文本只讀 mode=rt的模式打開已經(jīng)存在的文件

描述字符 含義
r 缺省值巴帮,只讀打開溯泣,如果文件不存在,則拋出錯誤FileNotFoundError異常
w 只寫打開榕茧,沒有文件則創(chuàng)建文件垃沦,如果文件存在,清空文件
x 創(chuàng)建文件用押,并只寫方式打開肢簿,文件存在則報錯
a 寫入打開,如果文件存在,則追加文件內(nèi)容池充,不存在則先創(chuàng)建再追加
b 二進制模式桩引,文件按照字節(jié)理解,字節(jié)操作使用bytes類型
t 缺省值收夸,文本模式坑匠,將文件按照某種字符標碼理解,按照字符操作
+ 不能單獨使用卧惜,讀寫打開一個文件厘灼。給原來只讀,只寫當(dāng)時打開提供缺失的讀或者寫功能

文件指針
文件指針咽瓷,指向當(dāng)前字節(jié)位置
f.seek(offset, whence=0, /) (f 是文件對象)
改變文件流的位置
offset 相對于whence偏移了多少個字節(jié)
whence 可以有三個選擇的值

  • 0 -- start of stream (the default); offset should be zero or positive 文件開頭设凹,默認
  • 1 -- current stream position; offset may be negative 當(dāng)前位置
  • 2 -- end of stream; offset is usually negative 文件末尾

文本模式模式下:支持從開頭向后偏移的。whence=1 表示從當(dāng)前位置開始偏移茅姜,但是offset 只能為0闪朱,相當(dāng)于原地不動。whence=2 表示從文本末尾開始偏移匈睁,offset 只能為0监透,seek 是按照字節(jié)偏移的

二進制模式下:默認whence=0,從文件開頭開始航唆,offset只能是正整數(shù)胀蛮。whence=1,offset可正可負糯钙。whence=2粪狼,offset可正可負。二進制模式支持任意起點的偏移任岸,向后seek可以超界再榄,但是向前的seek不可以超界,否則拋出異常享潜。

調(diào)用seek 會自動flush

2.buffering : 緩沖區(qū)

buffer緩沖區(qū)
緩沖區(qū)是一個內(nèi)存空間困鸥,一般來說是一個FIFO隊列,到緩沖區(qū)滿了或者達到閾值的時候剑按,數(shù)據(jù)才會flush 到磁盤中疾就。
flush() 將緩沖區(qū)數(shù)據(jù)寫入磁盤close()關(guān)閉前會調(diào)用flush()

buffering 說明
buffering=-1 t,b都是默認使用io.DEFAULT_BUFFER_SIZE 的值,默認是4096或者8192艺蝴。
buffering=0 b 關(guān)閉緩沖區(qū) 猬腰,t 不支持
buffering=1 b 就1個字節(jié),t 行緩沖猜敢,遇到換行符才flush
buffering> 1 b模式表示緩沖的大小姑荷,t模式盒延,還是使用默認的buffer_size

3.encoding

None 表示使用缺省編碼,依賴操作系統(tǒng)鼠冕。
windows默認是GBK(cp936)添寺。
linux默認是UTF-8。

4.其他參數(shù)

errors 編碼錯誤將被捕獲懈费,None和strict表示有編碼錯誤將拋出ValueError錯誤畦贸,ignore表示忽略。
newline文本模式中楞捂,換行的轉(zhuǎn)換薄坏。
以為None、'' 空串寨闹、'\r'胶坠、'\n'、'\r\n' 讀時繁堡,None表示'\r'沈善、'\n'、'\r\n'都被 轉(zhuǎn)換為'\n';''表示不會自動轉(zhuǎn)換通用換行符;其它合法字符表示換行符就是指定字符椭蹄,就會按照指定字符分行 寫 時闻牡,None表示'\n'都會被替換為系統(tǒng)缺省行分隔符os.linesep;'\n'或''表示'\n'不替換;其它合法字符表示'\n'會被 替換為指定的字符。
closefd 關(guān)閉文件描述符绳矩,True表示關(guān)閉它罩润。False會在文件關(guān)閉后保持這個描述符。fileobj.fileno()查看

三.read

fileobj.read(size=-1, /)
size表示讀取的多少個字符或字節(jié);負數(shù)或者None表示讀取到EOF

  • readline(size=-1)
    一行行讀取文件內(nèi)容翼馆。size設(shè)置一次能讀取行內(nèi)幾個字符或字節(jié)割以。
  • readlines(hint=-1)
    讀取所有行的列表。指定hint則返回指定的行數(shù)

四.write

fileobj.write(s, /)
把字符串s寫入到文件中并返回字符的個數(shù)应媚。
writelines(lines)严沥,將字符串列表寫入文件。

五.close

flush 并關(guān)閉文件對象中姜。
文件已經(jīng)關(guān)閉消玄,再次關(guān)閉沒有任何 效果

六. 上下文管理

交給python解釋器去釋放文件對象

with open("file") as f:
    f.read()

或者以下這種寫法

f = open('test')
with f:
    f.read()
  • 使用with .. as 關(guān)鍵字
  • 上下文管理的語句塊并不會開啟新的作用域
  • with語句塊執(zhí)行完畢,會自動關(guān)閉文件對象
    對于類似于文件對象的IO對象丢胚,一般來說都需要在不使用的時候關(guān)閉翩瓜、注銷,以釋放資源嗜桌。 IO被打開的時候奥溺,會獲得一個文件描述符辞色。計算機資源是有限的骨宠,所以操作系統(tǒng)都會做限制浮定。就是為了保護計算機 的資源不要被完全耗盡,計算資源是共享的层亿,不是獨占的桦卒。 一般情況下,除非特別明確的知道資源情況匿又,否則不要提高資源的限制值來解決問題方灾。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碌更,隨后出現(xiàn)的幾起案子裕偿,更是在濱河造成了極大的恐慌,老刑警劉巖痛单,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘿棘,死亡現(xiàn)場離奇詭異,居然都是意外死亡旭绒,警方通過查閱死者的電腦和手機鸟妙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挥吵,“玉大人重父,你說我怎么就攤上這事『鲂伲” “怎么了房午?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丹允。 經(jīng)常有香客問我歪沃,道長,這世上最難降的妖魔是什么嫌松? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任沪曙,我火速辦了婚禮,結(jié)果婚禮上萎羔,老公的妹妹穿的比我還像新娘液走。我一直安慰自己,他們只是感情好贾陷,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布缘眶。 她就那樣靜靜地躺著,像睡著了一般髓废。 火紅的嫁衣襯著肌膚如雪巷懈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天慌洪,我揣著相機與錄音顶燕,去河邊找鬼凑保。 笑死,一個胖子當(dāng)著我的面吹牛涌攻,可吹牛的內(nèi)容都是我干的欧引。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恳谎,長吁一口氣:“原來是場噩夢啊……” “哼芝此!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起因痛,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤婚苹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸵膏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體租副,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年较性,在試婚紗的時候發(fā)現(xiàn)自己被綠了用僧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赞咙,死狀恐怖责循,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情攀操,我是刑警寧澤院仿,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站速和,受9級特大地震影響歹垫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颠放,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一排惨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碰凶,春花似錦暮芭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砾莱,卻和暖如春瑞筐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腊瑟。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工聚假, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留块蚌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓魔策,卻偏偏與公主長得像,于是被迫代替她去往敵國和親河胎。 傳聞我的和親對象是個殘疾皇子闯袒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • Python文件操作 準備工作: 1) 使用python來讀取文件是非常簡單的操作,我們使用open()函數(shù)來打開...
    小學(xué)弟_閱讀 510評論 0 0
  • 文件打開方法: open(name,mode,buf) name:文件路徑 mode:打開方式 文件讀取方式: r...
    江魁閱讀 579評論 0 0
  • 總是記不住API,整理一下: python中對文件游岳、文件夾(文件操作函數(shù))的操作需要涉及到os模塊和shutil模...
    時尚灬IT男閱讀 681評論 0 3
  • python中對文件政敢、文件夾(文件操作函數(shù))的操作需要涉及到os模塊和shutil模塊。 得到當(dāng)前工作目錄胚迫,即當(dāng)前...
    23b813a14221閱讀 268評論 0 0
  • python中對文件喷户、文件夾(文件操作函數(shù))的操作需要涉及到os模塊和shutil模塊。 得到當(dāng)前工作目錄访锻,即當(dāng)前...
    Brise閱讀 635評論 0 1