Python檔案基本操作

來源:互聯網
上載者:User

標籤:utf-8   while   eve   保留   結束   lines   位元組   二進位格式   基本   

Python檔案基本操作1、檔案對象的屬性
屬性 描述
file.closed 如果檔案已被關閉返回true,否則返回false。
file.mode 返回被開啟檔案的訪問模式。
file.name 返迴文件的名稱。
file.newlines 未讀取到行分隔字元時為 None , 只有一種行分隔字元時為一個字串, 當 檔案有多種類型的行結束符時,則為一個包含所有當前所遇到的行結束 符的列表
file.encoding 返迴文件的編碼方式
file = open(‘allen.txt‘, ‘w‘)print(file.name)print(file.mode)print(file.encoding)print(file.newlines)輸出結果:allen.txtwUTF-8None
2、檔案的開啟

檔案開啟是通過內建函數open(),並返回一個檔案對象,

file object = open(file_name [, access_mode][, buffering])
  • file_name: file_name變數是一個包含了你要訪問的檔案名稱的字串值。比如:‘hello.text’

  • access_mode:訪問檔案的模式,唯讀(r),寫入(w),追加(a)等。所有可取值見如下的完全列表。這個參數是非強制的,預設檔案訪問模式為唯讀(r)。

  • buffering:值為0,訪問檔案時不寄存行。值為1,訪問檔案時寄存行。值為大於1的正數表示指定寄存區緩衝大小。值為負數時表示寄存區緩衝大小為系統預設。

一表勝十文:

模式 描述
r 以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式.
rb 以二進位格式開啟一個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。一般用於非文字檔片等。
r+ 以讀寫方式開啟檔案,檔案的指標在檔案的開頭
rb+ 以二進位格式開啟一個檔案可以用於讀寫,檔案指標放在開頭。一般用於非文字檔片等。
w 以唯寫方式開啟檔案,檔案的指標在檔案的開頭,如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb 以二進位格式開啟一個檔案用於唯寫,檔案的指標在檔案的開頭。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。一般用於非文字檔片等。
w+ 開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb+ 以二進位格式開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。一般用於非文字檔片等。
a 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab 以二進位格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。r+
a+ 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+ 以二進位格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

一圖勝十表:

模式 r r+ w w+ a a+
?? ?? ? ?? ? ??
? ?? ?? ?? ?? ??
建立 ? ? ?? ?? ?? ??
覆蓋 ? ? ?? ?? ? ?
指標在開始 ?? ?? ?? ?? ? ?
指標在結尾 ? ? ? ? ?? ??
3、檔案輸入

檔案的輸入和輸出是相對應螢幕來說,從讀取檔案內容到螢幕上叫輸入,將螢幕上內容寫到檔案內叫輸出

3.1 read(size):

用於從檔案讀取指定的位元組數,size:從檔案中讀取的位元組數。如果size未給定或為負則讀取所有
allen.txt檔案內容

line1line2line3
file = open(‘allen.txt‘, ‘r‘)cont1 = file.read(2)cont2 = file.read(10)cont3 = file.read(15)print(‘cont1=%s‘ % cont1)print(‘cont2=%s‘ % cont2)print(‘cont3=%s‘ % cont3)file.close()結果:cont1=licont2=ne1line2cont3=line3

從結果上看,使用同一個file讀取多次時,指標的位置從上一次讀取的最後位置的下一個位置開始讀取的。

3.2 readline()

用於從檔案讀取整行,包括 "\n" 字元。如果指定了一個非負數的參數,則返回指定大小的位元組數,包括 "\n" 字元。

fo = open("allen.txt", "r+")print("檔案名稱為: ", fo.name)line = fo.readline()print("讀取第一行 %s" % line)line = fo.readline(5)print("讀取的字串為: %s" % line)fo.close()

結果:

檔案名稱為:  allen.txt讀取第一行 line1讀取的字串為: line2
3.3 readlines()

用於讀取剩餘未讀取的所有行(直到結束符 EOF)並返回列表,而不是所有行,如果碰到結束符 EOF 則返回Null 字元串。

fo = open("allen.txt", "r+")print("檔案名稱為: ", fo.name)line = fo.readlines(1)print("讀取第一行 %s" % line)line = fo.readlines()print("讀取剩餘行: %s" % line)fo.close()

結果:

檔案名稱為:  allen.txt讀取第一行 [‘line1\n‘]讀取剩餘行: [‘line2\n‘, ‘line3‘]

使用for迴圈
例子1:

fo = open(‘allen.txt‘, ‘r‘)for line in fo.readlines():    print(line)fo.closed

結果:

line1line2line3

例子2:

fo = open(‘allen.txt‘, ‘r‘)for line in fo.readlines():    print(line.strip())fo.closed

再來看加上strip()後的結果

line1line2line3

從以上兩個例子中可以看出,readlines()讀取的時候將分行符號\n也一塊讀取出來,需要我們自己去掉,其實read()、readline()也是一樣

4、檔案輸出4.1 write()

向檔案中寫入指定字串。

import osfo = open(‘allen.txt‘, ‘w+‘)while True:    line = input(‘input content‘)  # input不會保留分行符號,需要自己加上系統的分行符號    if line != ‘.‘:        fo.write(‘%s%s‘ % (line, os.linesep))    else:        breakfor line in fo.readlines():    print(line)fo.close()

如果我們分別輸入3行:

line4line5line6

本來我們“allen.txt”檔案中有以下三行:

line1line2line3

加上我們輸入的3行應該是

line1line2line3line4line5line6

運行結果:

line4line5line6

但結果並不是啊,原因是什麼呢?還有為什麼我們要加上os.linesep()

需要注意點:
1、以‘w/w+’模式開啟的檔案,如果檔案存在則會覆蓋,如果檔案不存在則會建立。
2、write()和read()一樣並不會操作分行符號,需要使用os模組下os.linesep()加上分行符號,否則只會在一行上寫

4.2 writelines()

向檔案中寫入一序列的字串。
這一序列字串可以是由迭代對象產生的,如一個字串列表。
換行需要制定分行符號 \n。

fo = open(‘allen.txt‘, ‘w+‘)while True:    line = input(‘input content‘)  # input不會保留分行符號,需要自己加上系統的分行符號    if line != ‘.‘:        fo.writeline(‘%s%s‘ % (line, os.linesep))    else:        breakfor line in fo.readlines():    print(line)fo.close()

我們輸入3行

line1line2line3

開啟檔案查看結果:

line1line2line3
5、檔案定位移動5.1 tell()

例子1:

fo = open(‘allen.txt‘, ‘r‘)for line in fo.readline():    print(‘本行內容:%s,指標所在的位置:%d‘ % (line, fo.tell()))fo.close()
本行內容:line1,指標所在的位置:6本行內容:line2,指標所在的位置:12本行內容:line3,指標所在的位置:18

例子2:

fo = open(‘allen.txt‘, ‘r‘)for line in fo.readlines():    print(‘本行內容:%s,指標所在的位置:%d‘ % (line, fo.tell()))fo.close()
本行內容:line1,指標所在的位置:18本行內容:line2,指標所在的位置:18本行內容:line3,指標所在的位置:18

從例子1和2中我們可以看出readline()讀取一行,指標的位置移動一行,readlines()是一下子讀取到尾部。

5.2 seek()

seek(offset[, whence]) :沒有傳回值
offset -- 位移量,也就是代表需要移動位元組數
whence:可選,預設值為 0。表示要從哪個位置開始位移;0代表從檔案開頭開始算起,1代表從當前位置開始算起,2代表從檔案末尾算起

fo = open("allen.txt", "r+")line = fo.readline()print("第一次讀取的資料為:%s所在的位置為:%d " % (line, fo.tell()))# 重新設定檔案讀取指標到開頭fo.seek(0, 0)line = fo.readline()print("第二次讀取的資料為:%s所在的位置為:%d " % (line, fo.tell()))fo.closed
第一次讀取的資料為:line1所在的位置為:6 第二次讀取的資料為:line1所在的位置為:6 
6、檔案迭代

file對象是一個可迭代的對象,可以使用for迴圈進行迭代

fo = open("allen.txt", "r")for content in fo:    print(content)fo.close()
line1line2line3

內功深厚的同學,應該發現了一個問題,上邊所有的例子我們再關閉檔案的時候都是直接close(),試想一下,萬一中間出現異常了,close就執行不了,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用 try ... finally :

try:    f = open(‘allen.txt‘, ‘r‘)    print f.read()finally:    if f:        f.close()

但是每次都這麼寫實在太繁瑣,所以,Python 引入了 with 語句來自動幫我們調用 close() 方法:

with open(‘allen.txt‘, ‘r‘) as f:    f.read()

是不是很簡潔,有木有

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.