python创建文件对象_python基础教程:文件读写
在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’
以只讀模式打開(默認)
‘w’
以可寫模式打開,并清楚文件內(nèi)容(如果文件存在的話)
‘x’
創(chuàng)建一個新文件并以可寫模式打開
‘a(chǎn)’
以可寫模式打開,從文件末尾開始寫入(如果文件存在的話)
‘b’
二進制模式
‘t’
文本模式(默認)
’+’
打開一個已存在文件以便進行更新(讀和寫)
其中的'b'和't'是指定文件內(nèi)容是文本還是二進制,其它都說是關(guān)于讀寫方式的。
'b'是二進制模式打開文件,讀寫的數(shù)據(jù)都是字節(jié)對象(bytes),這個模式可以讀寫一切文件,包括文本文件,但讀寫文本文件時要注意編碼的問題。
't'是文本模式下讀寫文件。讀取時,默認會把平臺特定的行結(jié)束符 (Unix 上的\n, Windows 上的?\r\n)轉(zhuǎn)換為\n。寫入是,默認會把出現(xiàn)的\n?轉(zhuǎn)換回平臺特定的結(jié)束符。這種默認的“幕后修改”對文本文件來說沒有問題,但會破壞二進制數(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)會在不同的時間進行清理。
通過 with 語句或者調(diào)用 f.close() 關(guān)閉文件對象后,嘗試使用該文件對象將自動失敗。
文件對象的方法
通過上面的方法創(chuàng)建文件對象f后,,我們就可以通過其對應(yīng)的方法讀寫數(shù)據(jù)了。
(1)寫內(nèi)容到文件:f.write(string)
把內(nèi)容寫入文件的方法是write()方法,傳遞的對象必須是字符串(文本模式下)或字節(jié)對象(二進制模式下)。如果要寫入其它類型的對象(比如,字典、列表等等),就要先把它們轉(zhuǎn)換成字符串(文本模式下)或字節(jié)對象(二進制模式下)。
In [109]: f = open('myfile', 'w')
In [110]: f.write('認真學(xué)Python,就是文件的全部內(nèi)容。\n')
Out[110]: 21
In [111]: f.close()
(2)讀取文件內(nèi)容:f.read(size)
它會讀取文件里面的數(shù)據(jù)并將其返回為字符串(在文本模式下),或者字節(jié)對象(二進制模式)。參數(shù)size是一個可選的整數(shù)參數(shù),當(dāng)size被省略或為負的時候,讀取文件的全部內(nèi)容;如果文件的大小是機器內(nèi)存的兩倍或更大,那么可能出現(xiàn)錯誤。讀取并返回的size大小的內(nèi)容。如果已經(jīng)讀完全部內(nèi)容(到達文件末尾),將返回一個空字符串。
In [112]: f = open('myfile')
In [113]: f.read()
Out[113]: '認真學(xué)Python,就是文件的全部內(nèi)容。\n'
In [114]: f.read()
Out[114]: ''
f.readline()?從文件讀取一行,換行符\n留住字符串末尾;
f.readlines()?讀取文件所有行,返回一個字符串的列表;
In [118]: f.readline()
Out[118]: '認真學(xué)Python,就是文件的全部內(nèi)容。\n'
In [119]: f.seek(0)
Out[119]: 0
In [120]: f.readlines()
Out[120]: ['認真學(xué)Python,就是文件的全部內(nèi)容。\n']
遍歷文件的所有行,也可以用遍歷文件對象的方式,這是內(nèi)存高效、快速并簡單的方式:
In [122]: for line in f:
...: print(line)
...:
認真學(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)前位置,偏移量可以是負數(shù);
2 文件末尾,偏移量通常是負數(shù);
如何查看當(dāng)前位置呢?調(diào)用f.tell()方法。
總結(jié)
以上是生活随笔為你收集整理的python创建文件对象_python基础教程:文件读写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fyi是什么意思啊 fyi解释
- 下一篇: 什么一刻值千金 春宵一刻值千金