跟老齊學(xué)Python之不要紅頭文件(1)
這兩天身體不給力,拖欠了每天發(fā)講座的約定,看官見(jiàn)諒。
紅頭文件,是某國(guó)特別色的東西,在python里不需要,python里要處理的是計(jì)算機(jī)中的文件,包括文本的、圖片的、音頻的、視頻的等等,還有不少?zèng)]見(jiàn)過(guò)的擴(kuò)展名的,在linux中,不是所有的東西都被保存到文件中嗎?文件,在python中,是一種對(duì)象,就如同已經(jīng)學(xué)習(xí)過(guò)的字符串、數(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']
然后對(duì)部分屬性進(jìn)行詳細(xì)說(shuō)明,就是看官學(xué)習(xí)了。
打開(kā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)境變量,如果你沒(méi)有,需要寫(xiě)全啟動(dòng)python命令路徑),進(jìn)入到交互模式。在這個(gè)交互模式下,這樣操作:
>>> f = open("130.txt") #打開(kāi)已經(jīng)存在的文件 >>> for line in f: ... print line ... learn python http://qiwsir.github.io qiwsir@gmail.com
將打開(kāi)的文件,賦值個(gè)變量f,這樣也就是變量f跟對(duì)象文件130.txt用線(xiàn)連起來(lái)了(對(duì)象引用)。
接下來(lái),用for來(lái)讀取文件中的內(nèi)容,就如同讀取一個(gè)前面已經(jīng)學(xué)過(guò)的序列對(duì)象一樣,如list、str、tuple,把讀到的文件中的每行,賦值給變量line。也可以理解為,for循環(huán)是一行一行地讀取文件內(nèi)容。每次掃描一行,遇到行結(jié)束符號(hào)\n表示本行結(jié)束,然后是下一行。
從打印的結(jié)果看出,每一樣跟前面看到的文件內(nèi)容中的每一行是一樣的。只是行與行之間多了一空行,前面顯示文章內(nèi)容的時(shí)候,沒(méi)有這個(gè)空行?;蛟S這無(wú)關(guān)緊要,但是,還要深究一下,才能豁然。
在原文中,每行結(jié)束有本行結(jié)束符號(hào)\n,表示換行。在for語(yǔ)句匯總,print line表示每次打印完line的對(duì)象之后,就換行,也就是打印完line的對(duì)象之后會(huì)增加一個(gè)\n。這樣看來(lái),在每行末尾就有兩個(gè)\n,即:\n\n,于是在打印中就出現(xiàn)了一個(gè)空行。
>>> f = open('130.txt') >>> for line in f: ... print line, #后面加一個(gè)逗號(hào),就去掉了原來(lái)默認(rèn)增加的\n了,看看,少了空行。 ... learn python http://qiwsir.github.io qiwsir@gmail.com
在進(jìn)行上述操作的時(shí)候,有沒(méi)有遇到這樣的情況呢?
>>> f = open('130.txt') >>> for line in f: ... print line, ... learn python http://qiwsir.github.io qiwsir@gmail.com >>> for line2 in f: #在前面通過(guò)for循環(huán)讀取了文件內(nèi)容之后,再次讀取, ... print line2 #然后打印,結(jié)果就什么也顯示,這是什么問(wèn)題? ... >>>
如果看官?zèng)]有遇到上面問(wèn)題,可以試試。遇到了,這就解惑。不是什么錯(cuò)誤,是因?yàn)榍耙淮我呀?jīng)讀取了文件內(nèi)容,并且到了文件的末尾了。再重復(fù)操作,就是從末尾開(kāi)始繼續(xù)讀了。當(dāng)然顯示不了什么東西,但是python并不認(rèn)為這是錯(cuò)誤,因?yàn)楹竺婢蜁?huì)講到,或許在這次讀取之前,已經(jīng)又向文件中追加內(nèi)容了。那么,如果要再次讀取怎么辦?就從新來(lái)一邊好了。
特別提醒看官,因?yàn)楫?dāng)前的交互模式是在該文件所在目錄啟動(dòng)的,所以,就相當(dāng)于這個(gè)實(shí)驗(yàn)室和文件130.txt是同一個(gè)目錄,這時(shí)候我們打開(kāi)文件130.txt,就認(rèn)為是在本目錄中打開(kāi),如果文件不是在本目錄中,需要寫(xiě)清楚路徑。
比如:在上一級(jí)目錄中(~/Documents/ITArticles/BasicPython),加入我進(jìn)入到那個(gè)目錄中,運(yùn)行交互模式,然后試圖打開(kāi)130.txt文件。
>>> f = open("130.txt") Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: '130.txt' >>> f = open("./codes/130.txt") #必須得寫(xiě)上路徑了(注意,windows的路徑是\隔開(kāi),需要轉(zhuǎn)義。對(duì)轉(zhuǎn)義符,看官看以前講座) >>> for line in f: ... print line ... learn python http://qiwsir.github.io qiwsir@gmail.com >>>
創(chuàng)建文件
上面的實(shí)驗(yàn)中,打開(kāi)的是一個(gè)已經(jīng)存在的文件。如何創(chuàng)建文件呢?
>>> nf = open("131.txt","w") >>> nf.write("This is a file")
就這樣創(chuàng)建了一個(gè)文件?并寫(xiě)入了文件內(nèi)容呢?看看再說(shuō):
真的就這樣創(chuàng)建了新文件,并且里面有那句話(huà)呢。
看官注意了沒(méi)有,這次我們同樣是用open()這個(gè)函數(shù),但是多了個(gè)"w",這是在告訴python用什么樣的模式打開(kāi)文件。也就是說(shuō),用open()打開(kāi)文件,可以有不同的模式打開(kāi)??聪卤恚?/p>
從表中不難看出,不同模式下打開(kāi)文件,可以進(jìn)行相關(guān)的讀寫(xiě)。那么,如果什么模式都不寫(xiě),像前面那樣呢?那樣就是默認(rèn)為r模式,只讀的方式打開(kāi)文件。
>>> f = open("130.txt") >>> f <open file '130.txt', mode 'r' at 0xb7530230> >>> f = open("130.txt","r") >>> f <open file '130.txt', mode 'r' at 0xb750a700>
可以用這種方式查看當(dāng)前打開(kāi)的文件是采用什么模式的,上面顯示,兩種模式是一樣的效果。下面逐個(gè)對(duì)各種模式進(jìn)行解釋
"w":以寫(xiě)方式打開(kāi)文件,可向文件寫(xiě)入信息。如文件存在,則清空該文件,再寫(xiě)入新內(nèi)容
131.txt這個(gè)文件是存在的,前面建立的,并且在里面寫(xiě)了一句話(huà):This is a file
>>> fp = open("131.txt") >>> for line in fp: #原來(lái)這個(gè)文件里面的內(nèi)容 ... print line ... This is a file >>> fp = open("131.txt","w") #這時(shí)候再看看這個(gè)文件,里面還有什么呢?是不是空了呢? >>> fp.write("My name is qiwsir.\nMy website is qiwsir.github.io") #再查看內(nèi)容 >>> fp.close()
查看文件內(nèi)容:
$ cat 131.txt #cat是linux下顯示文件內(nèi)容的命令,這里就是要顯示131.txt內(nèi)容 My name is qiwsir. My website is qiwsir.github.io
"a":以追加模式打開(kāi)文件(即一打開(kāi)文件,文件指針自動(dòng)移到文件末尾),如果文件不存在則創(chuàng)建
>>> fp = open("131.txt","a") >>> fp.write("\nAha,I like program\n") #向文件中追加 >>> fp.close() #這是關(guān)閉文件,一定要養(yǎng)成一個(gè)習(xí)慣,寫(xiě)完內(nèi)容之后就關(guān)閉
查看文件內(nèi)容:
$ cat 131.txt My name is qiwsir. My website is qiwsir.github.io Aha,I like program
其它項(xiàng)目就不一一講述了。看官可以自己實(shí)驗(yàn)。
本講先到這里,明天繼續(xù)文件。感冒藥吃了,昏昏欲睡。
相關(guān)文章
python 實(shí)現(xiàn)多維數(shù)組轉(zhuǎn)向量
今天小編就為大家分享一篇python 實(shí)現(xiàn)多維數(shù)組轉(zhuǎn)向量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11python 實(shí)現(xiàn)查找文件并輸出滿(mǎn)足某一條件的數(shù)據(jù)項(xiàng)方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)查找文件并輸出滿(mǎn)足某一條件的數(shù)據(jù)項(xiàng)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python實(shí)現(xiàn)將Word表格嵌入到Excel中
把Word中的表格轉(zhuǎn)到Excel中,順便做一個(gè)調(diào)整。這個(gè)需求在實(shí)際工作中,很多人還是經(jīng)常碰到的!本文就將介紹如何利用Python實(shí)現(xiàn)這一功能,需要的朋友可以了解一下2021-12-12Python對(duì)象的生命周期源碼學(xué)習(xí)
這篇文章主要為大家介紹了Python對(duì)象的生命周期源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python 兩個(gè)列表的差集、并集和交集實(shí)現(xiàn)代碼
這篇文章主要介紹了Python 兩個(gè)列表的差集、并集和交集實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-09-09