国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python基礎(chǔ)教程:文件讀寫

neroneroffy / 2885人閱讀

摘要:在系統(tǒng)中,一切都是文件。第二個參數(shù)也是一個字符串,表示文件使用方式。是文本模式下讀寫文件。在使用創(chuàng)建文件對象時,最好使用關(guān)鍵字。其好處是,當(dāng)字句體結(jié)束后文件會正確關(guān)閉,即使在某個時刻引發(fā)了異常。

在Linux系統(tǒng)中,一切都是文件。但我們通常說的文件是保存在磁盤上的圖片、文檔、數(shù)據(jù)、程序等等。而在程序的IO操作中,很多時候就是從磁盤讀寫文件。本節(jié)我們講解Python中的文件對象如何操作文件。

創(chuàng)建文件對象

通過Python內(nèi)置函數(shù)open()可以很容易的創(chuàng)建一個文件對象。open函數(shù)有很多參數(shù),最常用的有兩個,使用open函數(shù)最常用的方法是:open(filename, mode)。

f = open("myfile", "w") 

第一個參數(shù)filename是文件名的字符串,比如myfile。第二個參數(shù)也是一個字符串,表示文件使用方式。mode的可選項如下:

mode 含義
‘r’ 以只讀模式打開(默認(rèn))
‘w’ 以可寫模式打開,并清楚文件內(nèi)容(如果文件存在的話)
‘x’ 創(chuàng)建一個新文件并以可寫模式打開
‘a(chǎn)’ 以可寫模式打開,從文件末尾開始寫入(如果文件存在的話)
‘b’ 二進(jìn)制模式
‘t’ 文本模式(默認(rèn))
’+’ 打開一個已存在文件以便進(jìn)行更新(讀和寫)

其中的"b""t"是指定文件內(nèi)容是文本還是二進(jìn)制,其它都說是關(guān)于讀寫方式的。

"b"是二進(jìn)制模式打開文件,讀寫的數(shù)據(jù)都是字節(jié)對象(bytes),這個模式可以讀寫一切文件,包括文本文件,但讀寫文本文件時要注意編碼的問題。
"t"是文本模式下讀寫文件。讀取時,默認(rèn)會把平臺特定的行結(jié)束符 (Unix 上的 , Windows 上的? )轉(zhuǎn)換為 。寫入是,默認(rèn)會把出現(xiàn)的 ?轉(zhuǎn)換回平臺特定的結(jié)束符。這種默認(rèn)的“幕后修改”對文本文件來說沒有問題,但會破壞二進(jìn)制數(shù)據(jù)(比如,JPEG或exe)文件中的數(shù)據(jù)。

在使用open創(chuàng)建文件對象時,最好使用?with?關(guān)鍵字。其好處是,當(dāng)字句體結(jié)束后文件會正確關(guān)閉,即使在某個時刻引發(fā)了異常。并且with比等效的try-finally代碼塊更簡短:

In [102]: with open("myfile") as f: 
     ...:     data = f.read() 
     ...:

In [103]: f.closed   
Out[103]: True

如果沒使用with關(guān)鍵字,就要調(diào)用f.close()來關(guān)閉文件并立即釋放它使用的系統(tǒng)資源。如果沒有顯示的關(guān)閉文件,Python的垃圾回收器最終將銷毀該對象并為你關(guān)閉打開的文件,但這個文件可能會保持打開狀態(tài)一段時間。另外一個風(fēng)險是不同的Python實現(xiàn)會在不同的時間進(jìn)行清理。

通過 with 語句或者調(diào)用 f.close() 關(guān)閉文件對象后,嘗試使用該文件對象將自動失敗。

文件對象的方法

通過上面的方法創(chuàng)建文件對象f后,,我們就可以通過其對應(yīng)的方法讀寫數(shù)據(jù)了。

(1)寫內(nèi)容到文件:f.write(string)
把內(nèi)容寫入文件的方法是write()方法,傳遞的對象必須是字符串(文本模式下)或字節(jié)對象(二進(jìn)制模式下)。如果要寫入其它類型的對象(比如,字典、列表等等),就要先把它們轉(zhuǎn)換成字符串(文本模式下)或字節(jié)對象(二進(jìn)制模式下)。

In [109]: f = open("myfile", "w")

In [110]: f.write("認(rèn)真學(xué)Python,就是文件的全部內(nèi)容。
")
Out[110]: 21

In [111]: f.close()

(2)讀取文件內(nèi)容:f.read(size)
它會讀取文件里面的數(shù)據(jù)并將其返回為字符串(在文本模式下),或者字節(jié)對象(二進(jìn)制模式)。參數(shù)size是一個可選的整數(shù)參數(shù),當(dāng)size被省略或為負(fù)的時候,讀取文件的全部內(nèi)容;如果文件的大小是機器內(nèi)存的兩倍或更大,那么可能出現(xiàn)錯誤。讀取并返回的size大小的內(nèi)容。如果已經(jīng)讀完全部內(nèi)容(到達(dá)文件末尾),將返回一個空字符串。

In [112]: f = open("myfile")

In [113]: f.read()
Out[113]: "認(rèn)真學(xué)Python,就是文件的全部內(nèi)容。
"

In [114]: f.read()
Out[114]: ""

f.readline()?從文件讀取一行,換行符 留住字符串末尾;
f.readlines()?讀取文件所有行,返回一個字符串的列表;

In [118]: f.readline()
Out[118]: "認(rèn)真學(xué)Python,就是文件的全部內(nèi)容。
"

In [119]: f.seek(0)
Out[119]: 0

In [120]: f.readlines()
Out[120]: ["認(rèn)真學(xué)Python,就是文件的全部內(nèi)容。
"]

遍歷文件的所有行,也可以用遍歷文件對象的方式,這是內(nèi)存高效、快速并簡單的方式:

In [122]: for line in f: 
     ...:     print(line) 
     ...:
認(rèn)真學(xué)Python,就是文件的全部內(nèi)容。

(3)文件對象的位置
前面的例子中,我們已經(jīng)讀到文件的末尾,如果要再從頭讀的話就要調(diào)用f.seek(0)來設(shè)置文件對象的位置到文件開頭。這個方法有兩個參數(shù):f.seek(cookie, whence=0)

cookie 是位置偏移量

whence 是相對位置,它有三種相對位置:

0 文件開頭,偏移量是0或整數(shù);

1 當(dāng)前位置,偏移量可以是負(fù)數(shù);

2 文件末尾,偏移量通常是負(fù)數(shù);

如何查看當(dāng)前位置呢?調(diào)用f.tell()方法。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43811.html

相關(guān)文章

  • python基礎(chǔ)教程:異步IO 之編程例子

    摘要:創(chuàng)建第一個協(xié)程推薦使用語法來聲明協(xié)程,來編寫異步應(yīng)用程序。協(xié)程兩個緊密相關(guān)的概念是協(xié)程函數(shù)通過定義的函數(shù)協(xié)程對象調(diào)用協(xié)程函數(shù)返回的對象。它是一個低層級的可等待對象,表示一個異步操作的最終結(jié)果。 我們講以Python 3.7 上的asyncio為例講解如何使用Python的異步IO。 showImg(https://segmentfault.com/img/remote/14600000...

    wangxinarhat 評論0 收藏0
  • python基礎(chǔ)教程:異步IO 之 概念和歷史

    摘要:并發(fā)的方式有多種,多線程,多進(jìn)程,異步等。多線程和多進(jìn)程之間的場景切換和通訊代價很高,不適合密集型的場景關(guān)于多線程和多進(jìn)程的特點已經(jīng)超出本文討論的范疇,有興趣的同學(xué)可以自行搜索深入理解。 編程中,我們經(jīng)常會遇到并發(fā)這個概念,目的是讓軟件能充分利用硬件資源,提高性能。并發(fā)的方式有多種,多線程,多進(jìn)程,異步IO等。多線程和多進(jìn)程更多應(yīng)用于CPU密集型的場景,比如科學(xué)計算的時間都耗費在CPU...

    BicycleWarrior 評論0 收藏0
  • python基礎(chǔ)教程:包,對,沒錯,絕對不是雙肩包!

    摘要:比如,模塊名表示包中名為的子模塊。例如,文件可以包含以下代碼定義了之后,就會把,,導(dǎo)入到當(dāng)前命名空間。這種導(dǎo)入使用前導(dǎo)點來指示相對導(dǎo)入中涉及的當(dāng)前包和父包。也就是說被執(zhí)行的主程序里面不能包含相對導(dǎo)入。 包,Package,是一種Python模塊的集合,從文件組織形式上看,包就是一個文件夾,里面放著各種模塊(.py文件),也可以有子文件夾(子包)。包名構(gòu)建了一個Python模塊的命名空間...

    wuyangnju 評論0 收藏0
  • python基礎(chǔ)教程:序列化

    摘要:默認(rèn)情況下,它也是不安全的,如果數(shù)據(jù)是由黑客精心設(shè)計的,則反序列化的數(shù)據(jù)可能被植入惡意代碼??偨Y(jié)為我們提供了數(shù)據(jù)序列化的工具。如果是自己內(nèi)部使用,可以作為一個選擇進(jìn)行復(fù)雜對象的序列化。 上一節(jié)我們學(xué)習(xí)了文件的讀寫,把一個字符串(或字節(jié)對象)保存到磁盤是一件很容易的事情。但是在實際編程中,我們經(jīng)常需要保存結(jié)構(gòu)化數(shù)據(jù),比如復(fù)雜的字典、嵌套的列表等等,這時候就需要我們想辦法把這些結(jié)構(gòu)化數(shù)據(jù)先...

    gityuan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<