摘要:它則是以行為單位返回字符串,也就是每次讀一行,依次循環,如果不限定,直到最后一個返回的是空字符串,意味著到文件末尾了。
讀文件
在某個文件夾下面建立了一個文件,名曰:130.txt,并且在里面輸入了如下內容:
learn python http://qiwsir.github.io qiwsir@gmail.com
f = open("123.txt") #打開已經存在的文件,此文件在當前目錄,若在其他目錄使用絕對路徑 for line in f: print line, #Python 3: print(line, end="") learn python http://qiwsir.github.io liuguoquan@gmail.com
緊接著做下面的操作:
>>> for line2 in f: #在前面通過for循環讀取了文件內容之后,再次讀取, ... print line2 #然后打印,結果就什么也顯示,這是什么問題? ... >>>
這不是什么錯誤,是因為前一次已經讀取了文件內容,并且到了文件的末尾了。再重復操作,就是從末尾開始繼續讀了。當然顯示不了什么東西,但是Python并不認為這是錯誤。
創建文件在這里,如果要再次讀取,那就從新f = open("130.txt")。
f = open("1234.txt","w") #創建文件 f.write("hello") #向文件寫入內容 f.close() #關閉文件流
創建文件,我們同樣是用open()這個函數,但是多了個"w",這是在告訴Python用什么樣的模式打開文件。也就是說,用open()操作文件,可以有不同的模式。看下表:
模式 | 描述 |
---|---|
r | 以讀方式打開文件,可讀取文件信息。 |
w | 以寫方式打開文件,可向文件寫入信息。如文件存在,則清空該文件,再寫入新內容 |
a | 以追加模式打開文件(即一打開文件,文件指針自動移到文件末尾),如果文件不存在則創建 |
r+ | 以讀寫方式打開文件,可對文件進行讀和寫操作。 |
w+ | 消除文件內容,然后以讀寫方式打開文件。 |
a+ | 以讀寫方式打開文件,并把文件指針移到文件尾。 |
b | 以二進制模式打開文件,而不是以文本模式。該模式只對Windows或Dos有效,類Unix的文件是用二進制模式進行操作的。 |
從表中不難看出,不同模式下打開文件,可以進行相關的讀寫。那么,如果什么模式都不寫,像前面那樣呢?那樣就是默認為r模式,只讀的方式打開文件。
使用with使用with實現安全的關閉文件,不用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 qiwsir@gmail.com hello This is about "with...as..." >>>文件狀態
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) #文件創建時間read/readLine/readLines
read:如果指定了參數size,就按照該指定長度從文件中讀取內容,否則,就讀取全文。被讀出來的內容,全部塞到一個字符串里面。這樣有好處,就是東西都到內存里面了,隨時取用,比較快捷;“成也蕭何敗蕭何”,也是因為這點,如果文件內容太多了,內存會吃不消的。文檔中已經提醒注意在“non-blocking”模式下的問題,關于這個問題,不是本節的重點,暫時不討論。
readline:那個可選參數size的含義同上。它則是以行為單位返回字符串,也就是每次讀一行,依次循環,如果不限定size,直到最后一個返回的是空字符串,意味著到文件末尾了(EOF)。
readlines:size同上。它返回的是以行為單位的列表,即相當于先執行readline(),得到每一行,然后把這一行的字符串作為列表中的元素塞到一個列表中,最后將此列表返回。
有這樣一個文檔,you.md,其內容和基本格式如下:
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 = open("you.md") >>> content = f.read() >>> content #結果為字符串 "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,返回空字符串,則終止循環 break print line , #Python 3: print(line, end="") f.close() #別忘記關閉文件
>>> f = open("you.md") >>> content = f.readlines() >>> content #結果為列表 ["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()一次性將全部內容讀入內存,可以使用while循環和readline()來完成這個任務。
此外,還有一個方法: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這個函數的功能是讓指針移動。
>>> 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 " 此時指針所在的位置,還可以用`tell()`來顯示,如 >>> f.tell() 17L
seek()還有別的參數,具體如下:
seek(...)
seek(offset[, whence]) -> None. Move to new file position.
whence的值:
默認值是0,表示從文件開頭開始計算指針偏移的量(簡稱偏移量)。這是offset必須是大于等于0的整數。
是1時,表示從當前位置開始計算偏移量。offset如果是負數,表示從當前位置向前移動,整數表示向后移動。
是2時,表示相對文件末尾移動。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38206.html
摘要:楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數據提供網站數據采集和爬蟲軟件定制開發服務,服務范圍涵蓋社交網絡電子商務分類信息學術研究等。 楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...
摘要:通過前面幾節的學習,已經奠定了通往學習的基礎,從這節開始,來學習機器學習。一什么是機器學習機器學習讓機器從數據中學習,進而得到一個更加符合現實規律的模型,通過對模型的使用使得機器比以往表現的更好,這就是機器學習。 通過前面幾節的學習,已經奠定了通往AI學習的基礎,從這節開始,來學習機器學習。 一、什么是機器學習 機器學習(MachineLearning):讓機器從數據中學習,進而得到一...
閱讀 1808·2021-11-23 09:51
閱讀 1268·2021-11-18 10:02
閱讀 963·2021-10-25 09:44
閱讀 2099·2019-08-26 18:36
閱讀 1619·2019-08-26 12:17
閱讀 1146·2019-08-26 11:59
閱讀 2746·2019-08-23 15:56
閱讀 3350·2019-08-23 15:05