W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
文件,是computer姑娘中非常重要的東西,在python里,它也是一種類型的對(duì)象,類似前面已經(jīng)學(xué)習(xí)過的其它數(shù)據(jù)類型,包括文本的、圖片的、音頻的、視頻的等等,還有不少?zèng)]見過的擴(kuò)展名的。事實(shí)上,在linux操作系統(tǒng)中,所有的東西都被保存到文件中。
先在交互模式下查看一下文件都有哪些屬性:
>>> 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']
然后對(duì)部分屬性進(jìn)行詳細(xì)說明,就是看官學(xué)習(xí)了。
特別注意觀察,在上面有__iter__
這個(gè)東西。曾經(jīng)在講述列表的時(shí)候,是不是也出現(xiàn)這個(gè)東西了呢?是的。它意味著這種類型的數(shù)據(jù)是可迭代的(iterable)。在下面的講解中,你就會(huì)看到了,能夠用for來讀取其中的內(nèi)容。
在某個(gè)文件夾下面建立了一個(gè)文件,名曰:130.txt,并且在里面輸入了如下內(nèi)容:
learn python
http://qiwsir.github.io
qiwsir@gmail.com
此文件一共三行。
下圖顯示了這個(gè)文件的存儲(chǔ)位置:
在上面截圖中,我在當(dāng)前位置輸入了python(我已經(jīng)設(shè)置了環(huán)境變量,如果你沒有,需要寫全啟動(dòng)python命令路徑),進(jìn)入到交互模式。在這個(gè)交互模式下,這樣操作:
>>> f = open("130.txt") #打開已經(jīng)存在的文件
>>> for line in f:
... print line
...
learn python
http://qiwsir.github.io
qiwsir@gmail.com
提醒初學(xué)者注意,在那個(gè)文件夾輸入了啟動(dòng)python交互模式的命令,那么,如果按照上面的方法open("130.txt")
打開文件,就意味著這個(gè)文件130.txt是在當(dāng)前文件夾內(nèi)的。如果要打開其它文件夾內(nèi)的文件,請用相對(duì)路徑或者絕對(duì)路徑來表示,從而讓python能夠找到那個(gè)文件。
將打開的文件,賦值給變量f,這樣也就是變量f跟對(duì)象文件130.txt用線連起來了(對(duì)象引用),本質(zhì)上跟前面所講述的其它類型數(shù)據(jù)進(jìn)行賦值是一樣的。
接下來,用for來讀取文件中的內(nèi)容,就如同讀取一個(gè)前面已經(jīng)學(xué)過的序列對(duì)象一樣,如list、str、tuple,把讀到的文件中的每行,賦值給變量line。也可以理解為,for循環(huán)是一行一行地讀取文件內(nèi)容。每次掃描一行,遇到行結(jié)束符號(hào)\n表示本行結(jié)束,然后是下一行。
從打印的結(jié)果看出,每一行跟前面看到的文件內(nèi)容中的每一行是一樣的。只是行與行之間多了一空行,前面顯示文章內(nèi)容的時(shí)候,沒有這個(gè)空行。或許這無關(guān)緊要,但是,還要深究一下,才能豁然。
在原文中,每行結(jié)束有本行結(jié)束符號(hào)\n,表示換行。在for語句匯總,print line表示每次打印完line的對(duì)象之后,就換行,也就是打印完line的對(duì)象之后會(huì)增加一個(gè)\n。這樣看來,在每行末尾就有兩個(gè)\n,即:\n\n,于是在打印中就出現(xiàn)了一個(gè)空行。
>>> f = open('130.txt')
>>> for line in f:
... print line, #后面加一個(gè)逗號(hào),就去掉了原來默認(rèn)增加的\n了,看看,少了空行。
...
learn python
http://qiwsir.github.io
qiwsir@gmail.com
在進(jìn)行上述操作的時(shí)候,有沒有遇到這樣的情況呢?
>>> f = open('130.txt')
>>> for line in f:
... print line,
...
learn python
http://qiwsir.github.io
qiwsir@gmail.com
>>> for line2 in f: #在前面通過for循環(huán)讀取了文件內(nèi)容之后,再次讀取,
... print line2 #然后打印,結(jié)果就什么也顯示,這是什么問題?
...
>>>
如果看官?zèng)]有遇到上面問題,可以試試。這不是什么錯(cuò)誤,是因?yàn)榍耙淮我呀?jīng)讀取了文件內(nèi)容,并且到了文件的末尾了。再重復(fù)操作,就是從末尾開始繼續(xù)讀了。當(dāng)然顯示不了什么東西,但是python并不認(rèn)為這是錯(cuò)誤,因?yàn)楹竺婢蜁?huì)講到,或許在這次讀取之前,已經(jīng)又向文件中追加內(nèi)容了。那么,如果要再次讀取怎么辦?就從新來一邊好了。這就好比有一個(gè)指針在指著文件中的每一行,每讀完一行,指針向移動(dòng)一行。直到指針指向了文件的最末尾。當(dāng)然,也有辦法把指針移動(dòng)到任何位置。
特別提醒看官,因?yàn)楫?dāng)前的交互模式是在該文件所在目錄啟動(dòng)的,所以,就相當(dāng)于這個(gè)實(shí)驗(yàn)室和文件130.txt是同一個(gè)目錄,這時(shí)候我們打開文件130.txt,就認(rèn)為是在本目錄中打開,如果文件不是在本目錄中,需要寫清楚路徑。
比如:在上一級(jí)目錄中(~/Documents/ITArticles/BasicPython),假如我進(jìn)入到那個(gè)目錄中,運(yùn)行交互模式,然后試圖打開130.txt文件。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: