Python 文件和輸入輸出小結(jié)
1.打開和關(guān)閉文件(open(),file(),close())
有兩種內(nèi)建函數(shù)可以獲取文件對象:open和file。他們的用法完全一樣。下面只以open()為例子講解。獲取一個文件對象(打開文件)的語法如下:
filename不用說你也應(yīng)該知道是你要打開文件的路徑。
access_mode用來標(biāo)識文件打開的模式,默認(rèn)為r(只讀)。
常用的模式如下表所示:
文件模式 | 解釋 |
r | 以只讀方式打開 |
w | 以寫方式打開,文件不為空時清空文件;文件不存在時新建文件。 |
a | 追加模式,沒有則創(chuàng)建 |
r+,w+,a+ | 以讀寫模式打開,參見w,a |
另外還有一個b表示二進(jìn)制模式訪問,但是對于Linux或者unix系統(tǒng)來說這個模式?jīng)]有任何意義,因為他們把所有文件都看作二進(jìn)制文件,包括文本文件。
第三個參數(shù)不經(jīng)常用到,標(biāo)識訪問文件的緩沖方式,0代表不緩沖,1代表緩
沖一行,-1代表使用系統(tǒng)默認(rèn)緩沖方式。只要使用系統(tǒng)默認(rèn)就好。
一些例子:
>>> f = open('/etc/passwd','r')
>>> f1 = open('/etc/test','w')
使用完文件后,一定要記得關(guān)閉文件,操作如下:
>>> f.close()
2.文件讀入
2.1.file.read(size = -1)
讀取從當(dāng)前文件游標(biāo)起size個字節(jié)的文件內(nèi)容。如果size=-1,則讀取所有剩余字節(jié)。
>>> f = open('/etc/passwd')
>>> f.read(100)
'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nol'
2.2.file.readlines(size=-1)
從文件中讀取并返回一行(包括行結(jié)束符),或返回最大size個字符
>>> f.readline()
'ogin\n'#和上面一個例子輸出的最后拼起來就是 'nologin',因為游標(biāo)在l后面。
>>> f.readline(1)
'a'
2.3.file.readlines(sizhint=0)
讀取文件所有的行,并作為一個列表返回(包括行結(jié)束符),如果sizhint>0則返回總和大約sizhint字節(jié)的行(具體由緩沖區(qū)大小決定)。
f.readlines()
['dm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n', 'sync:x:5:0:sync:/sbin:/bin/sync\n', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n', 'halt:x:7:0:halt:/sbin:/sbin/halt\n', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n', ......
輸出省略。
3.文件輸出
3.1.file.write(str)
向文件中寫入指定的字符串。
>>> f = file('/root/test.py','w+')
>>> f.write("print 'hello,world'")
>>> f.read()
''
>>> f.close()
>>> file('/root/test.py','r').read()
"print 'hello,world'"
3.2.file.write(seq)
向文件寫入字符串序列seq。seq是任何返回字符串的可迭代對象。
>>> f = file('/root/test.py','a+')
>>> codelst = ['\n','import os\n',"os.popen('ls').read()\n"]
>>> f.writelines(codelst)
>>> f.close()
>>> file('/root/test.py','r').read()
"print 'hello,world'\nimport os\nos.popen('ls').read()\n"
注意,文件寫入的時候,不會自動加上換行符,必須手動加上。
4.文件移動
學(xué)過C語言的同學(xué),一定對fseek()函數(shù)不陌生,在Python中,seek()方法是fseek()的替代者。
seek(offset,whence=0)
方法可以將文件游標(biāo)移動到文件的任意位置。其中offset代表需要移動的偏移字節(jié)數(shù),whence表示要從哪個位置開始偏移:
0代表從文件開頭開始算起,
1代表從當(dāng)前位置開始算起,
2代表從文件末尾算起。
那我們?nèi)绾沃喇?dāng)前文件游標(biāo)在哪里呢?別擔(dān)心,這里有個tell()方法可以返回當(dāng)前文件游標(biāo)的位置。
5.文件迭代
在Python中,文件不僅僅是一個對象,而且是一個可迭代對象!我們可以利用如下迭代方式,輕松的訪問和處理文件內(nèi)容,而不必全部讀出(readlines)后再迭代(性能上差了很多哦?。?/p>
for eachline in f:
#dealwith eachline of f
例如:
>>> for eachline in f:
... print eachline
6.os、os.path與文件
os和os.path中提供了一些跟文件有關(guān)的接口,下面介紹一些常用的接口。其他接口可以自己查閱相關(guān)文檔。
注意:以下函數(shù)傳入的參數(shù)都是字符串形式的文件名字,文件名可由文件對象的name屬性獲得。
函數(shù) | 描述 |
os.path.basename() | 去掉目錄路徑,返回文件名 |
os.path.dirname() | 去掉文件名,返回目錄路徑 |
os.path.getatime() os.path.getctime() os.path.getmtime() os.path.size() | 返回文件的atime,ctime,mtime和大小 |
os.path.exists() | 該文件或目錄是否存在 |
os.path.abs() | 指定路徑是否為絕對路徑 |
os.path.isdir() | 路徑是否存在且為目錄 |
os.path.isfile() | 路徑是否存在且為文件。 |
os.path.islink() | 指定路徑是否存在且為一個符號鏈接 |
>>> import os.path
>>> f = open('/root/test.py','r')
>>> os.path.basename(f.name)
'test.py'
>>> f.name
'/root/test.py'
>>> os.path.getsize(f.name)
52
>>> os.path.isabs(f.name)
True
>>> os.path.isdir(f.name)
False
相關(guān)文章
Pandas分組聚合之groupby()、agg()方法的使用教程
今天看到pandas的聚合函數(shù)agg,比較陌生,平時的工作中處理數(shù)據(jù)的時候使用的也比較少,為了加深印象,總結(jié)一下使用的方法,下面這篇文章主要給大家介紹了關(guān)于Pandas分組聚合之groupby()、agg()方法的使用教程,需要的朋友可以參考下2023-01-01Pyinstaller打包.py生成.exe的方法和報錯總結(jié)
今天小編就為大家分享一篇關(guān)于Pyinstaller打包.py生成.exe的方法和報錯總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04python將二維數(shù)組升為一維數(shù)組或二維降為一維方法實例
在實際應(yīng)用的過程中,遇到列表或是數(shù)組的維數(shù)不同,需要變換的問題,如二維列表/數(shù)組變成了一維列表/數(shù)組,下面這篇文章主要給大家介紹了關(guān)于python將二維數(shù)組升為一維數(shù)組或二維降為一維的相關(guān)資料,需要的朋友可以參考下2022-11-11python2與python3爬蟲中g(shù)et與post對比解析
這篇文章主要介紹了python2與python3爬蟲中g(shù)et與post對比解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09TensorFlow命名空間和TensorBoard圖節(jié)點實例
今天小編就為大家分享一篇TensorFlow命名空間和TensorBoard圖節(jié)點實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python與sqlite3實現(xiàn)解密chrome cookie實例代碼
這篇文章主要介紹了python與sqlite3實現(xiàn)解密chrome cookie實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Python中使用partial改變方法默認(rèn)參數(shù)實例
這篇文章主要介紹了Python中使用partial改變方法默認(rèn)參數(shù)實例,本文直接給出使用實例,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-04-04