[Python] (Day-15) - 文件操作

A book is a gift you can open again and again. 書籍是一件可以一次又一次打開的禮物。

文件,可以看作成一個存儲數(shù)據(jù)容器
文件的操作包含:創(chuàng)建桦沉、打開、讀取金闽、更新纯露,關(guān)閉等


open()

open() 將會返回一個 file 對象

基本語法格式如下:

open(filename, mode)
  • filenamefilename 變量是一個包含了你要訪問的文件名稱的字符串值
  • modemode 決定了打開文件的模式:只讀,寫入代芜,追加等埠褪。所有可取值見如下的完全列表。這個參數(shù)是非強制的,默認(rèn)文件訪問模式為只讀(r)

不同模式打開文件的完全列表:

模式 描述
r 以只讀方式打開文件组橄。文件的指針將會放在文件的開頭。這是默認(rèn)模式罚随。
rb 以二進制格式打開一個文件用于只讀玉工。文件指針將會放在文件的開頭。這是默認(rèn)模式淘菩。
r+ 打開一個文件用于讀寫遵班。文件指針將會放在文件的開頭。
rb+ 以二進制格式打開一個文件用于讀寫潮改。文件指針將會放在文件的開頭狭郑。
w 打開一個文件只用于寫入。如果該文件已存在則將其覆蓋汇在。如果該文件不存在翰萨,創(chuàng)建新文件。
wb 以二進制格式打開一個文件只用于寫入糕殉。如果該文件已存在則將其覆蓋亩鬼。如果該文件不存在,創(chuàng)建新文件阿蝶。
w+ 打開一個文件用于讀寫雳锋。如果該文件已存在則將其覆蓋。如果該文件不存在羡洁,創(chuàng)建新文件玷过。
wb+ 以二進制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋筑煮。如果該文件不存在辛蚊,創(chuàng)建新文件。
a 打開一個文件用于追加咆瘟。如果該文件已存在嚼隘,文件指針將會放在文件的結(jié)尾。也就是說袒餐,新的內(nèi)容將會被寫入到已有內(nèi)容之后飞蛹。如果該文件不存在,創(chuàng)建新文件進行寫入灸眼。
ab 以二進制格式打開一個文件用于追加卧檐。如果該文件已存在,文件指針將會放在文件的結(jié)尾焰宣。也就是說霉囚,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在匕积,創(chuàng)建新文件進行寫入盈罐。
a+ 打開一個文件用于讀寫榜跌。如果該文件已存在,文件指針將會放在文件的結(jié)尾盅粪。文件打開時會是追加模式钓葫。如果該文件不存在,創(chuàng)建新文件用于讀寫票顾。
ab+ 以二進制格式打開一個文件用于追加础浮。如果該文件已存在,文件指針將會放在文件的結(jié)尾奠骄。如果該文件不存在豆同,創(chuàng)建新文件用于讀寫。

代碼示例:

# 打開一個文件, 如果不存在含鳞,創(chuàng)建一個
f = open("foo.txt","w",encoding="utf-8")

words = """
人生苦短影锈,我用Python!\n
面對攻擊你的人,the best revenge is massive success!\n
你現(xiàn)在的認(rèn)為的無比正確的事情有可能只是假象
"""
# 寫入數(shù)據(jù)到文件內(nèi)
f.write(words)

# 關(guān)閉打開的文件
f.close()

文件對象的方法

f.read()

  • 為了讀取一個文件的內(nèi)容蝉绷,調(diào)用 f.read(size), 這將讀取一定數(shù)目的數(shù)據(jù), 然后作為字符串或字節(jié)對象返回
  • size 是一個可選的數(shù)字類型的參數(shù)精居。 當(dāng) size 被忽略了或者為負(fù), 那么該文件的所有內(nèi)容都將被讀取并且返回

示例:打開一個已經(jīng)存在的文件并讀取

# 打開一個文件
f = open("foo.txt","r",encoding="utf-8")

str = f.read()
print(str)

# 關(guān)閉打開的文件
f.close()

輸出結(jié)果:

人生苦短,我用Python!

面對攻擊你的人潜必,the best revenge is massive success!

你現(xiàn)在的認(rèn)為的無比正確的事情有可能只是假象

f.readline()

  • f.readline() 會從文件中讀取單獨的一行
  • 換行符為 \n
  • f.readline() 如果返回一個空字符串, 說明已經(jīng)已經(jīng)讀取到最后一行

示例:打開一個已經(jīng)存在的文件并讀取第一行

# 打開一個文件
f = open("foo.txt", "r", encoding="utf-8")

str = f.f.readline()
print(str)

# 關(guān)閉打開的文件
f.close()

輸出結(jié)果:

人生苦短靴姿,我用Python!

f.readlines()

  • f.readlines() 將返回該文件中包含的所有行
  • 如果設(shè)置可選參數(shù) sizehint, 則讀取指定長度的字節(jié), 并且將這些字節(jié)按行分割

示例:打開一個已經(jīng)存在的文件并讀取所有行

# 打開一個文件
f = open("foo.txt", "r", encoding="utf-8")

str = f.f.readlines()
print(str)

# 關(guān)閉打開的文件
f.close()

輸出結(jié)果:

['人生苦短,我用Python!\n', '\n', '面對攻擊你的人磁滚,the best revenge is massive success!\n', '\n', '你現(xiàn)在的認(rèn)為的無比正確的事情有可能只是假象\n']

另一種方式是迭代一個文件對象然后讀取每行:

# 打開一個文件
f = open("foo.txt", "r", encoding="utf-8")

for line in f:
    print(line, end='')

# 關(guān)閉打開的文件
f.close()

輸出結(jié)果:

人生苦短佛吓,我用Python!

面對攻擊你的人,the best revenge is massive success!

你現(xiàn)在的認(rèn)為的無比正確的事情有可能只是假象

f.write()

  • f.write(string) 將 string 寫入到文件中, 然后返回寫入的字符數(shù)
  • 如果要寫入一些不是字符串的東西, 那么將需要先進行轉(zhuǎn)換
# 打開一個文件
f = open("foo.txt", "w", encoding="utf-8")

# 寫入數(shù)據(jù)
num = f.write( "Python 是一個非常好的語言垂攘。\n是的维雇,的確非常好!!\n" )
print(num)

# 關(guān)閉打開的文件
f.close()

輸出結(jié)果:

29

foo.txt 文件 內(nèi)字符:

Python 是一個非常好的語言。
是的晒他,的確非常好!!

寫入不是字符串?dāng)?shù)據(jù)

f = open("foo.txt", "w", encoding="utf-8")
value = ('Mazy', 21, 88.88)
s = str(value)
f.write(s)

f.tell()

  • f.tell() 返回文件對象當(dāng)前所處的位置, 它是從文件開頭開始算起的字節(jié)數(shù)

f.seek()

如果要改變文件當(dāng)前的位置, 可以使用 f.seek(offset, from_what) 函數(shù)

from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當(dāng)前位置, 2 表示文件的結(jié)尾, 值為默認(rèn)為0吱型,即文件開頭

  • seek(x,0) : 從起始位置即文件首行首字符開始移動 x 個字符
  • seek(x,1) : 表示從當(dāng)前位置往后移動x個字符
  • seek(-x,2):表示從文件的結(jié)尾往前移動x個字符
f = open("foo.txt", "w", encoding="utf-8")
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)     # 移動到文件的第六個字節(jié)
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # 移動到文件的倒數(shù)第三字節(jié)
13
>>> f.read(1)
b'd'

f.close()

  • 當(dāng)你處理完一個文件后, 調(diào)用 f.close()
  • 來關(guān)閉文件并釋放系統(tǒng)的資源,如果嘗試再調(diào)用該文件陨仅,則會拋出異常

File 對象常用的函數(shù)

序號 方法 描述
1 file.close() 關(guān)閉文件津滞。關(guān)閉后文件不能再進行讀寫操作
2 file.flush() 刷新文件內(nèi)部緩沖,直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)立刻寫入文件, 而不是被動的等待輸出緩沖區(qū)寫入
3 file.fileno() 返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊read方法等一些底層操作上
4 file.isatty() 如果文件連接到一個終端設(shè)備返回 True灼伤,否則返回 False
5 file.next() 返回文件下一行
6 file.read([size]) 從文件讀取指定的字節(jié)數(shù)触徐,如果未給定或為負(fù)則讀取所有
7 file.readline([size]) 讀取整行,包括 "\n" 字符
8 file.readlines([sizeint]) 讀取所有行并返回列表狐赡,若給定sizeint>0撞鹉,返回總和大約為sizeint字節(jié)的行, 實際讀取值可能比sizeint較大, 因為需要填充緩沖區(qū)
9 file.seek(offset[, whence]) 設(shè)置文件當(dāng)前位置
10 file.tell() 返回文件當(dāng)前位置
11 file.truncate([size]) 從文件的首行首字符開始截斷,截斷文件為 size 個字符,無 size 表示從當(dāng)前位置截斷鸟雏;截斷之后 V 后面的所有字符被刪除享郊,其中 Widnows 系統(tǒng)下的換行代表2個字符大小
12 file.write(str) 將字符串寫入文件,沒有返回值
13 file.writelines(sequence) 向文件寫入一個序列字符串列表孝鹊,如果需要換行則要自己加入每行的換行符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拂蝎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惶室,更是在濱河造成了極大的恐慌,老刑警劉巖玄货,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皇钞,死亡現(xiàn)場離奇詭異,居然都是意外死亡松捉,警方通過查閱死者的電腦和手機夹界,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隘世,“玉大人可柿,你說我怎么就攤上這事”撸” “怎么了复斥?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長械媒。 經(jīng)常有香客問我目锭,道長,這世上最難降的妖魔是什么纷捞? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任痢虹,我火速辦了婚禮,結(jié)果婚禮上主儡,老公的妹妹穿的比我還像新娘奖唯。我一直安慰自己,他們只是感情好糜值,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布丰捷。 她就那樣靜靜地躺著,像睡著了一般寂汇。 火紅的嫁衣襯著肌膚如雪瓢阴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天健无,我揣著相機與錄音荣恐,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛叠穆,可吹牛的內(nèi)容都是我干的少漆。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼硼被,長吁一口氣:“原來是場噩夢啊……” “哼示损!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嚷硫,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤检访,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仔掸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脆贵,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年起暮,在試婚紗的時候發(fā)現(xiàn)自己被綠了卖氨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡负懦,死狀恐怖筒捺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纸厉,我是刑警寧澤系吭,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站颗品,受9級特大地震影響村斟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抛猫,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一蟆盹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闺金,春花似錦逾滥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掀亩,卻和暖如春舔哪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背槽棍。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工捉蚤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抬驴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓缆巧,卻偏偏與公主長得像布持,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陕悬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言拼岳,發(fā)作 oo-boon-too 的音枝誊。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,215評論 9 467
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法裂问,內(nèi)部類的語法,繼承相關(guān)的語法牛柒,異常的語法堪簿,線程的語...
    子非魚_t_閱讀 31,599評論 18 399
  • 內(nèi)置函數(shù)Python解釋器內(nèi)置了許多功能和類型,總是可用的。他們是按字母順序列在這里皮壁。 abs(x)返回一個數(shù)的絕...
    uangianlap閱讀 1,229評論 0 0
  • 1.能調(diào)用方法的一定是對象,比如數(shù)值椭更、字符串、列表蛾魄、元組虑瀑、字典,甚至文件也是對象滴须,Python中一切皆為對象舌狗。 s...
    ph_郭先森閱讀 946評論 0 0
  • 笑來老師說,想要做成功一件事扔水,一定要賦予這件事一個重大的意義痛侍。 我發(fā)現(xiàn)我現(xiàn)在比較喜歡用“笑來老師說”了。哈哈 當(dāng)我...
    念起ly閱讀 166評論 0 0