摘要:它則是以行為單位返回字符串,也就是每次讀一行,依次循環(huán),如果不限定,直到最后一個返回的是空字符串,意味著到文件末尾了。
讀文件
在某個文件夾下面建立了一個文件,名曰:130.txt,并且在里面輸入了如下內(nèi)容:
learn python http://qiwsir.github.io [email protected]
f = open("123.txt") #打開已經(jīng)存在的文件,此文件在當(dāng)前目錄,若在其他目錄使用絕對路徑 for line in f: print line, #Python 3: print(line, end="") learn python http://qiwsir.github.io [email protected]
緊接著做下面的操作:
>>> for line2 in f: #在前面通過for循環(huán)讀取了文件內(nèi)容之后,再次讀取, ... print line2 #然后打印,結(jié)果就什么也顯示,這是什么問題? ... >>>
這不是什么錯誤,是因為前一次已經(jīng)讀取了文件內(nèi)容,并且到了文件的末尾了。再重復(fù)操作,就是從末尾開始繼續(xù)讀了。當(dāng)然顯示不了什么東西,但是Python并不認(rèn)為這是錯誤。
創(chuàng)建文件在這里,如果要再次讀取,那就從新f = open("130.txt")。
f = open("1234.txt","w") #創(chuàng)建文件 f.write("hello") #向文件寫入內(nèi)容 f.close() #關(guān)閉文件流
創(chuàng)建文件,我們同樣是用open()這個函數(shù),但是多了個"w",這是在告訴Python用什么樣的模式打開文件。也就是說,用open()操作文件,可以有不同的模式。看下表:
模式 | 描述 |
---|---|
r | 以讀方式打開文件,可讀取文件信息。 |
w | 以寫方式打開文件,可向文件寫入信息。如文件存在,則清空該文件,再寫入新內(nèi)容 |
a | 以追加模式打開文件(即一打開文件,文件指針自動移到文件末尾),如果文件不存在則創(chuàng)建 |
r+ | 以讀寫方式打開文件,可對文件進行讀和寫操作。 |
w+ | 消除文件內(nèi)容,然后以讀寫方式打開文件。 |
a+ | 以讀寫方式打開文件,并把文件指針移到文件尾。 |
b | 以二進制模式打開文件,而不是以文本模式。該模式只對Windows或Dos有效,類Unix的文件是用二進制模式進行操作的。 |
從表中不難看出,不同模式下打開文件,可以進行相關(guān)的讀寫。那么,如果什么模式都不寫,像前面那樣呢?那樣就是默認(rèn)為r模式,只讀的方式打開文件。
使用with使用with實現(xiàn)安全的關(guān)閉文件,不用close操作了
>>> with open("130.txt","a") as f: ... f.write(" This is about "with...as..."") ... >>> with open("130.txt","r") as f: ... print f.read() ... learn python http://qiwsir.github.io [email protected] hello This is about "with...as..." >>>文件狀態(tài)
import os file_stat = os.stat("123.txt") print file_stat posix.stat_result(st_mode=33188, st_ino=13575445, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=57, st_atime=1470988267, st_mtime=1470988267, st_ctime=1470988267) #文件創(chuàng)建時間read/readLine/readLines
read:如果指定了參數(shù)size,就按照該指定長度從文件中讀取內(nèi)容,否則,就讀取全文。被讀出來的內(nèi)容,全部塞到一個字符串里面。這樣有好處,就是東西都到內(nèi)存里面了,隨時取用,比較快捷;“成也蕭何敗蕭何”,也是因為這點,如果文件內(nèi)容太多了,內(nèi)存會吃不消的。文檔中已經(jīng)提醒注意在“non-blocking”模式下的問題,關(guān)于這個問題,不是本節(jié)的重點,暫時不討論。
readline:那個可選參數(shù)size的含義同上。它則是以行為單位返回字符串,也就是每次讀一行,依次循環(huán),如果不限定size,直到最后一個返回的是空字符串,意味著到文件末尾了(EOF)。
readlines:size同上。它返回的是以行為單位的列表,即相當(dāng)于先執(zhí)行readline(),得到每一行,然后把這一行的字符串作為列表中的元素塞到一個列表中,最后將此列表返回。
有這樣一個文檔,you.md,其內(nèi)容和基本格式如下:
You Raise Me Up When I am down and, oh my soul, so weary; When troubles come and my heart burdened be; Then, I am still and wait here in the silence, Until you come and sit awhile with me. You raise me up, so I can stand on mountains; You raise me up, to walk on stormy seas; I am strong, when I am on your shoulders; You raise me up: To more than I can be.
分別用上述三種函數(shù)讀取這個文件。
>>> f = open("you.md") >>> content = f.read() >>> content #結(jié)果為字符串 "You Raise Me Up When I am down and, oh my soul, so weary; When troubles come and my heart burdened be; Then, I am still and wait here in the silence, Until you come and sit awhile with me. You raise me up, so I can stand on mountains; You raise me up, to walk on stormy seas; I am strong, when I am on your shoulders; You raise me up: To more than I can be. " >>> f.close() >>> print content
>>> f = open("you.md") >>> f.readline() "You Raise Me Up " >>> f.readline() "When I am down and, oh my soul, so weary; " >>> f.readline() "When troubles come and my heart burdened be; " >>> f.close() f = open("you.md") while True: line = f.readline() if not line: #到EOF,返回空字符串,則終止循環(huán) break print line , #Python 3: print(line, end="") f.close() #別忘記關(guān)閉文件
>>> f = open("you.md") >>> content = f.readlines() >>> content #結(jié)果為列表 ["You Raise Me Up ", "When I am down and, oh my soul, so weary; ", "When troubles come and my heart burdened be; ", "Then, I am still and wait here in the silence, ", "Until you come and sit awhile with me. ", "You raise me up, so I can stand on mountains; ", "You raise me up, to walk on stormy seas; ", "I am strong, when I am on your shoulders; ", "You raise me up: To more than I can be. "] >>> for line in content: ... print line , #Python 3: print(line, end="") >>> f.close讀很大的文件fileinput
如果文件太大,就不能用read()或者readlines()一次性將全部內(nèi)容讀入內(nèi)存,可以使用while循環(huán)和readline()來完成這個任務(wù)。
此外,還有一個方法:fileinput模塊
>>> import fileinput >>> for line in fileinput.input("you.md"): ... print line , #Python 3: print(line, end="") ... You Raise Me Up When I am down and, oh my soul, so weary; When troubles come and my heart burdened be; Then, I am still and wait here in the silence, Until you come and sit awhile with me. You raise me up, so I can stand on mountains; You raise me up, to walk on stormy seas; I am strong, when I am on your shoulders; You raise me up: To more than I can be.
還有一種方法,更為常用:
>>> for line in f: ... print line , #Python 3: print(line, end="") ... You Raise Me Up When I am down and, oh my soul, so weary; When troubles come and my heart burdened be; Then, I am still and wait here in the silence, Until you come and sit awhile with me. You raise me up, so I can stand on mountains; You raise me up, to walk on stormy seas; I am strong, when I am on your shoulders; You raise me up: To more than I can be.
之所以能夠如此,是因為文件是可迭代的對象,直接用for來迭代即可。
seek這個函數(shù)的功能是讓指針移動。
>>> f = open("you.md") >>> f.readline() "You Raise Me Up " >>> f.readline() "When I am down and, oh my soul, so weary; " >>> f.seek(0) #回到文件的最開始位置 >>> f.readline() "You Raise Me Up " 此時指針?biāo)诘奈恢茫€可以用`tell()`來顯示,如 >>> f.tell() 17L
seek()還有別的參數(shù),具體如下:
seek(...)
seek(offset[, whence]) -> None. Move to new file position.
whence的值:
默認(rèn)值是0,表示從文件開頭開始計算指針偏移的量(簡稱偏移量)。這是offset必須是大于等于0的整數(shù)。
是1時,表示從當(dāng)前位置開始計算偏移量。offset如果是負(fù)數(shù),表示從當(dāng)前位置向前移動,整數(shù)表示向后移動。
是2時,表示相對文件末尾移動。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38206.html
摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...
摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:以下這些項目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...
摘要:通過前面幾節(jié)的學(xué)習(xí),已經(jīng)奠定了通往學(xué)習(xí)的基礎(chǔ),從這節(jié)開始,來學(xué)習(xí)機器學(xué)習(xí)。一什么是機器學(xué)習(xí)機器學(xué)習(xí)讓機器從數(shù)據(jù)中學(xué)習(xí),進而得到一個更加符合現(xiàn)實規(guī)律的模型,通過對模型的使用使得機器比以往表現(xiàn)的更好,這就是機器學(xué)習(xí)。 通過前面幾節(jié)的學(xué)習(xí),已經(jīng)奠定了通往AI學(xué)習(xí)的基礎(chǔ),從這節(jié)開始,來學(xué)習(xí)機器學(xué)習(xí)。 一、什么是機器學(xué)習(xí) 機器學(xué)習(xí)(MachineLearning):讓機器從數(shù)據(jù)中學(xué)習(xí),進而得到一...
閱讀 1845·2021-11-23 09:51
閱讀 1303·2021-11-18 10:02
閱讀 974·2021-10-25 09:44
閱讀 2114·2019-08-26 18:36
閱讀 1634·2019-08-26 12:17
閱讀 1158·2019-08-26 11:59
閱讀 2755·2019-08-23 15:56
閱讀 3367·2019-08-23 15:05