Python之檔案操作:檔案的讀寫

來源:互聯網
上載者:User

標籤:關閉   load   trunc   cache   其他   系統   並且   允許   版本   

一、open函數:對檔案讀寫之前,需要先開啟檔案,擷取檔案控制代碼注意:open() file() 盡量使用open(),Python3以後不支援file()了1、open(file_name[,access_mode][,buffering])(1)參數說明file_name:一個包含了你要訪問的檔案路徑及檔案名稱的字串值。盡量使用絕對路徑access_mode:開啟檔案的方式:這個參數是非強制的,預設檔案訪問模式為唯讀(r)r,唯讀w:寫之前會清空檔案的內容a:追加的方式,在原本內容中繼續寫buffering:先寫到緩衝中如果buffering的值被設定為0,就不會有寄存;如果值為1,訪問檔案時會緩衝行;如果值位大於1的整數,表明了這就是寄存區的緩衝大小;如果取負值,寄存區的緩衝大小則為系統預設。該參數也是非強制性的。(2)傳回值該語句表示返回的File_object是一個指向檔案的指標(一個檔案對象)檔案控制代碼。當以唯讀模式(r)開啟一個不存在的檔案時,就會報IOError異常(檔案不存在),但如果是以寫或追加模式(w/a/a+)開啟一個不存在的檔案時,預設會建立該檔案,但如果是所在路徑中有目錄不存在,也會報IOError異常 建立一個檔案:fp=open(‘d:\\tmp\\01.txt‘,w) 2、mode檔案操作模式r,w,ar+可讀可寫w+:開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。a+:開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。 rb wb ab 讀寫二進位 3、通過open擷取到的檔案控制代碼可以對檔案作的其他動作(1)fp.closed判斷檔案是否已經關閉。返回true如果檔案已被關閉,否則返回false(2)fp.mode輸出讀寫入模式。返回被開啟檔案的訪問模式。(3)fp.name:返迴文件的名稱。(4) fp.softspace如果用print輸出後,是否跟一個空格符,false不列印,true則列印。(5)fp.close()重新整理緩衝區裡任何還沒寫入的資訊,並關閉該檔案,這之後便不能再進行寫入。(6)flush()把緩衝區中的內容持久化寫到磁碟裡緩衝區寫滿的情況,系統會自動調用flush()方法。調用flush的時機:寫入了多少長度的資料,或者間隔了多長的時間如果沒有flush(),持久化內容丟失(7)next()# for i in fp:# print i把一個file用for...in file這樣的迴圈遍曆語句時,就是調用next()函數來實現。檔案控制代碼是一個迭代器??? fp=open(fileName,‘r‘) print fp.next()print fp.next()print fp.fileno() 判斷當前操作的檔案控制代碼是哪一個numberfp.close() (8)裁剪檔案truncate([size])用於截斷檔案,如果指定了選擇性參數 size,則表示截斷檔案為 size 個字元。 如果沒有指定 size,則從當前位置起截斷;截斷之後 size 後面的所有字元被刪除。如果size比檔案的大小還要大,依據系統的不同可能是不改變檔案,也可能是用0把檔案補到相應的大小,也可能是以一些隨機的內容加上去。fp=‘e:\\tmp\\03.txt‘ f1=open(fp,‘r+‘)line=f1.readline()print line f1.truncate()print f1.tell()f1.close() 二、對檔案作讀寫操作1、常規的讀寫操作(1)read([size])size:讀取的長度,以byte為單位。如果不指定參數,表示一次性讀取全部內容,以字串形式返回,並且每一行結尾會有一個"\n"符號。 (2)、readline([size])調一次讀取一行,如果給定了size,有可能返回的只是一行的一部分,以字串的形式返回,並且結尾會有一個分行符號"\n"。讀完一行,檔案操作標記移動到下一行的開頭。返回的是字串 (3)、readlines([size])(3.1)參數size:指定很小的數字,會不生效,python 預設8k緩衝區大小,需要大於8k生效讀取檔案的全部內容,這個函數的內部是通過迴圈調用readline()來實現的(3.2)傳回值返回的是列表格式,每一行是列表的一個元素,並且結尾會有一個分行符號"\n" (4)、writelines(seq)seq:把seq(序列)的內容全部寫到檔案中(多行一次性寫入)。也不會自動加入分行符號。注意:序列中的內容也必須是字串類型的資料,才能成功寫入檔案。 (5)、write(str)把str寫到檔案中,預設是不加分行符號的,所以如果想換行的話,得手動加入分行符號‘\n‘。 2、使用linecache模組讀取檔案import linecache允許從任何檔案裡得到任何的行,並且使用緩衝進行最佳化,常見的情況是從單個檔案讀取多行。(1)linecache.getlines(filename,lineno)從名為 filename 的檔案中得到第 lineno 行。這個函數從不會拋出一個異常–產生錯誤時它將返回”(分行符號將包含在找到的行裡)。如果檔案沒有找到,這個函數將會在 sys.path 搜尋。(2)linecache.getlines(filename) 返回列表從名為 filename 的檔案中得到全部內容,輸出為列表格式,以檔案每行為列表中的一個元素,並以 linenum-1 為元素在列表中的位置儲存(3)linecache.clearcache()清除緩衝,如果你不再需要先前從 getline() 中得到的行(4)linecache.checkcache([filename])檢查緩衝的有效性。如果在緩衝中的檔案在硬碟上發生了變化,並且你需要更新版本,使用這個函數。如果省略 filename,將檢查緩衝裡的所有條目。(5)linecache.updatecache(filename)更新檔案名稱為 filename 的緩衝。如果 filename 檔案更新了,使用這個函數可以更新linecache.getlines(filename)返回的列表。 另:讀取檔案之後你不需要使用檔案的緩衝時需要在最後清理一下緩衝,使linecache.clearcache()清理緩衝,釋放緩衝。這個模組是使用記憶體來緩衝你的檔案內容,所以需要耗費記憶體,開啟檔案的大小和開啟速度和你的記憶體大小有關係。列印奇數行的檔案:fp=‘e:\\tmp\\05.txt‘list1=linecache.getlines(fp)for i in list1[::2]:print i 3、pickle模組和cPickle模組對檔案整體的讀寫(1)、pickle模組(Python提供一個標準的模組)列表內容持久儲存到記憶體中使用它你可以在一個檔案中儲存任何Python對象,之後你又可以把它完整無缺地取出來。這被稱為持久地儲存對象(序列化)(2)、cPickle 列表和檔案內容的轉換它的功能和pickle模組完全相同,只不過它是用C語言編寫的,因此要快得多(比pickle快1000倍),推薦使用。import cPickle as pp.dump(list,fp) 把列表list內容儲存到記憶體中,存入一個檔案(這個檔案帶有cPickle特有的格式)中fp:開啟的檔案控制代碼,如:fp=open(‘d:\\tmp\\test1.txt‘,‘wb‘)list=p.load(fp) 把之前存放在檔案中的內容儲存到列表list中  三、讀取檔案的位置定位1、tell()返回當前操作檔案讀取到的位置一個中文:3個位元組Windows下‘\r\n’(分行符號)佔兩個位元組,Linux下\n mac下\r.2、seek(offset[,from]) 移動遊標到想去的位置from:,預設是0,2:從末尾開始計算位移;1:從當前位置作為標準位置offset:移動的總距離,可以是正數,可以為負數 

Python之檔案操作:檔案的讀寫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.