跟老齊學(xué)Python之不要紅頭文件(2)
文件的屬性
所謂屬性,就是能夠通過(guò)一個(gè)文件對(duì)象得到的東西。
>>> f = open("131.txt","a")
>>> f.name
'131.txt'
>>> f.mode #顯示當(dāng)前文件打開的模式
'a'
>>> f.closed #文件是否關(guān)閉,如果關(guān)閉,返回True;如果打開,返回False
False
>>> f.close() #關(guān)閉文件的內(nèi)置函數(shù)
>>> f.closed
True
文件的有關(guān)狀態(tài)
很多時(shí)候,我們需要獲取一個(gè)文件的有關(guān)狀態(tài)(有時(shí)候成為屬性,但是這里的文件屬性和上面的文件屬性是不一樣的,可是,我覺得稱之為文件狀態(tài)更好一點(diǎn)),比如創(chuàng)建日期,訪問(wèn)日期,修改日期,大小,等等。在os模塊中,有這樣一個(gè)方法,能夠解決此問(wèn)題:
>>> import os
>>> file_stat = os.stat("131.txt") #查看這個(gè)文件的狀態(tài)
>>> file_stat #文件狀態(tài)是這樣的。從下面的內(nèi)容,有不少?gòu)挠⑽膯卧~中可以猜測(cè)出來(lái)。
posix.stat_result(st_mode=33204, st_ino=5772566L, st_dev=2049L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=69L, st_atime=1407897031, st_mtime=1407734600, st_ctime=1407734600)
>>> file_stat.st_ctime #這個(gè)是文件創(chuàng)建時(shí)間
1407734600.0882277 #換一種方式查看這個(gè)時(shí)間
>>> import time
>>> time.localtime(file_stat.st_ctime) #這回看清楚了。
time.struct_time(tm_year=2014, tm_mon=8, tm_mday=11, tm_hour=13, tm_min=23, tm_sec=20, tm_wday=0, tm_yday=223, tm_isdst=0)
以上關(guān)于文件狀態(tài)和文件屬性的內(nèi)容,在對(duì)文件的某些方面進(jìn)行判斷和操作的時(shí)候或許會(huì)用到。特別是文件屬性。比如在操作文件的時(shí)候,我們經(jīng)常要首先判斷這個(gè)文件是否已經(jīng)關(guān)閉或者打開,就需要用到file.closed這個(gè)屬性來(lái)判斷了。
文件的內(nèi)置函數(shù)
>>> dir(file)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
>>>
這么多內(nèi)置函數(shù),不會(huì)都講述,只能撿著重點(diǎn)的來(lái)實(shí)驗(yàn)了。
>>> f = open("131.txt","r")
>>> f.read()
'My name is qiwsir.\nMy website is qiwsir.github.io\nAha,I like program\n'
>>>
file.read()能夠?qū)⑽募械膬?nèi)容全部讀取過(guò)來(lái)。特別注意,這是返回一個(gè)字符串,而且是將文件中的內(nèi)容全部讀到內(nèi)存中。試想,如果內(nèi)容太多是不是就有點(diǎn)慘了呢?的確是,千萬(wàn)不要去讀大個(gè)的文件。
>>> contant = f.read()
>>> type(contant)
<type 'str'>
如果文件比較大了,就不要一次都讀過(guò)來(lái),可以轉(zhuǎn)而一行一行地,用readline
>>> f = open("131.txt","r")
>>> f.readline() #每次返回一行,然后指針向下移動(dòng)
'My name is qiwsir.\n'
>>> f.readline() #再讀,再返回一行
'My website is qiwsir.github.io\n'
>>> f.readline()
'Aha,I like program\n'
>>> f.readline() #已經(jīng)到最后一行了,再讀,不報(bào)錯(cuò),返回空
''
這個(gè)方法,看官是不是覺得太慢了呢?有沒(méi)有痛快點(diǎn)的呢?有,請(qǐng)揮刀自宮,不用自宮,也能用readlines。注意區(qū)別,這個(gè)是復(fù)數(shù),言外之意就是多行啦。
>>> f = open("131.txt","r")
>>> cont = f.readlines()
>>> cont
['My name is qiwsir.\n', 'My website is qiwsir.github.io\n', 'Aha,I like program\n']
>>> type(cont)
<type 'list'>
>>> for line in cont:
... print line
...
My name is qiwsir.
My website is qiwsir.github.io
Aha,I like program
從實(shí)驗(yàn)中我們可以看到,readlines和read有一樣之處,都是將文件內(nèi)容一次性讀出來(lái),存放在內(nèi)存,但是兩者也有區(qū)別,read返回的是str類型,readlines返回的是list,而且一行一個(gè)元素,因此,就可以通過(guò)for逐行打印出來(lái)了。
在print line中,注意觀察list里面的每個(gè)元素,最后都是一個(gè)\n結(jié)尾,所以打印的結(jié)果會(huì)有空行。其原因前面已經(jīng)介紹過(guò)了,忘了的朋友請(qǐng)回滾到上一講
不過(guò),還是要提醒列位,太大的文件不用都讀到內(nèi)存中。對(duì)付大點(diǎn)的文件,還是推薦這么做:
>>> f = open("131.txt","r")
>>> f
<open file '131.txt', mode 'r' at 0xb757c230>
>>> type(f)
<type 'file'>
>>> for line in f:
... print line
...
My name is qiwsir.
My website is qiwsir.github.io
Aha,I like program
以上都是讀文件的內(nèi)置函數(shù)和方法。除了讀,就是要寫。所謂寫,就是將內(nèi)容存入到文件中。用到的內(nèi)置函數(shù)是write。但是,要寫入文件,還要注意打開文件的模式,可以是w,也可以是a,看具體情況而定。
>>> f = open("131.txt","a") #因?yàn)檫@個(gè)文件已經(jīng)存在,我又不想清空,用追加的模式
>>> f.write("There is a baby.") #這句話應(yīng)該放到文件最后
>>> f.close() #請(qǐng)看官注意,寫了之后,一定要及時(shí)關(guān)閉文件。才能代表真正寫入
看看寫的效果:
>>> f = open("131.txt","r")
>>> for line in f.readlines():
... print line
...
My name is qiwsir.
My website is qiwsir.github.io
Aha,I like program
There is a baby. #果然增加了這一行
以上是關(guān)于文件的基本操作。其實(shí)對(duì)文件遠(yuǎn)遠(yuǎn)不知這些,有興趣的看官可以google一下pickle這個(gè)模塊,是一個(gè)很好用的東西。
相關(guān)文章
基于Python的Houdini插件開發(fā)過(guò)程詳情
這篇文章主要介紹了基于Python的Houdini插件開發(fā)過(guò)程詳情,Houdini是基于QT進(jìn)行的開發(fā),支持?Python、HScript二種腳本進(jìn)行插件開發(fā),下面文章介紹內(nèi)容,需要的朋友可以參考一下2022-02-02PyCharm MySQL可視化Database配置過(guò)程圖解
這篇文章主要介紹了PyCharm MySQL可視化Database配置過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Django框架cookie和session方法及參數(shù)設(shè)置
這篇文章主要為大家介紹了Django框架cookie和session參數(shù)設(shè)置及介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03python中reversed與reverse的區(qū)別解析
reverse()是python中列表的一個(gè)內(nèi)置方法(在字典、字符串和元組中沒(méi)有這個(gè)內(nèi)置方法),用于列表中數(shù)據(jù)的反轉(zhuǎn),這篇文章主要介紹了python中reversed與reverse的區(qū)別,需要的朋友可以參考下2023-03-03Python中easy_install 和 pip 的安裝及使用
本篇文章主要介紹了Python中easy_install 和 pip 的安裝及使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Django media static外部訪問(wèn)Django中的圖片設(shè)置教程
這篇文章主要介紹了Django media static外部訪問(wèn)Django中的圖片設(shè)置教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04