python檔案讀寫小結

2021-08-24 23:21:47 字數 4893 閱讀 9288

python檔案讀寫小結

讀檔案

開啟乙個檔案用open()方法(open()返回乙個檔案物件,它是可迭代的):

>>> f = open('

test.txt

', '

r')

r表示是文字檔案,rb是二進位制檔案。(這個mode引數預設值就是r)

如果檔案不存在,open()函式就會丟擲乙個ioerror的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在:

>>> f=open('

test.txt

', 'r'

)traceback (most recent call last):

file

"", line 1, in

filenotfounderror: [errno 2] no such file or directory: '

test.txt

'

檔案使用完畢後必須關閉,因為檔案物件會占用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的

>>> f.close()

由於檔案讀寫時都有可能產生ioerror,一旦出錯,後面的f.close()就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try ... finally來實現:

try

:f = open('

/path/to/file

', 'r'

)print

(f.read())

finally:if

f:f.close()

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

with open('

/path/to/file

', 'r'

) as f:

print(f.read())

python檔案物件提供了三個「讀」方法: read()、readline() 和 readlines()。每種方法可以接受乙個變數以限制每次讀取的資料量。

注意:這三種方法是把每行末尾的'\n'也讀進來了,它並不會預設的把'\n'去掉,需要我們手動去掉。

in[2]: with open('

test1.txt

', 'r'

) as f1:

list1 =f1.readlines()

in[3]: list1

out[3]: ['

111\n

', '

222\n

', '

333\n

', '

444\n

', '

555\n

', '

666\n

']

去掉'\n'

in[4]: with open('

test1.txt

', 'r'

) as f1:

list1 =f1.readlines()

for i in

range(0, len(list1)):

list1[i] = list1[i].rstrip('\n'

)in[5]: list1

out[5]: ['

111', '

222', '

333', '

444', '

555', '

666']

對於read()和readline()也是把'\n'讀入了,但是print的時候可以正常顯示(因為print裡的'\n'被認為是換行的意思)

in[7]: with open('

test1.txt

', 'r'

) as f1:

list1 =f1.read()

in[8]: list1

out[8]: '

111\n222\n333\n444\n555\n666\n

'in[9]: print

(list1)

111222

333444

555666

in[10]: with open('

test1.txt

', 'r'

) as f1:

list1 =f1.readline()

in[11]: list1

out[11]: '

111\n

'in[12]: print

(list1)

111

乙個python面試題的例子:

要點就是:(1)用with (2)處理行末的'\n' (3)使用二分查詢提高演算法效率。(4)使用set快速去重。

寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,傳入識別符號'w'或者'wb'表示寫文字檔案或寫二進位制檔案:

>>> f = open('

test.txt

', 'w'

) # 若是'wb'就表示寫二進位制檔案

>>> f.write('

hello, world!')

>>> f.close()

注意:'w'這個模式是醬紫:如果沒有這個檔案,就建立乙個;如果有,那麼就會先把原檔案的內容清空再寫入新的東西。所以若不想清空原來的內容而是直接在後面追加新的內容,就用'a'這個模式。

我們可以反覆呼叫write()來寫入檔案,但是務必要呼叫f.close()來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險:

with open('

test.txt

', 'w'

) as f:

f.write(

'hello, world!

')

python檔案物件提供了兩個「寫」方法: write()和 writelines()。

f1 = open('

test1.txt

', 'w'

)f1.writelines(["1

", "

2", "3"

])#此時test1.txt的內容為:123

f1 = open('

test1.txt

', 'w'

)f1.writelines([

"1\n

", "

2\n", "

3\n"])#

此時test1.txt的內容為:#1

#2

#3

關於open()的mode引數

'r':讀

'w':寫

'a':追加

'r+' == r+w(可讀可寫,檔案若不存在就報錯(ioerror))

'w+' == w+r(可讀可寫,檔案若不存在就建立)

'a+' ==a+r(可追加可寫,檔案若不存在就建立)

對應的,如果是二進位制檔案,就都加乙個b就好啦:

'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

file_obj.seek(offset,whence=0)

file_obj.seek(offset,whence=0)方法用來在檔案中移動檔案指標。offset表示偏移多少。可選引數whence表示從**開始偏移,預設是0為檔案開頭,1為當前位置,2為檔案尾部。舉例:

f = open("

test1.txt

", "a+"

)print

(f.read())

f.write('1

')f.seek(0, 0)

#把檔案指標從末尾移到開頭,沒有這句話下面的read()就讀不到正確的東西

print

(f.read())

f.close()

注意:這個檔案指標的改變只是作用於'r',對'w'和'a'不會起作用,如果是'w',那麼write()永遠都是從開頭寫(會覆蓋後面對應位置的內容),是'a'的話write()就永遠都是從最後開始追加。

>>> f = open('

test.txt

', '

r', encoding='

gbk'

)>>>f.read()'測試

'

遇到有些編碼不規範的檔案,你可能會遇到unicodedecodeerror,因為在文字檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函式還接收乙個errors引數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:

>>> f = open('

test.txt

', '

r', encoding='

gbk', errors='

ignore

')

python檔案讀寫小結

Python檔案讀寫

今天在看python檔案讀寫操作,發現python file name mode buffering file 函式用於建立乙個file物件,它有乙個別名叫open 可能更形象一些,它們是內建函式。來看看它的引數。它引數都是以字串的形式傳遞的。name是檔案的名字。mode 是開啟的模式,可選的值為...

python檔案讀寫

檔案讀寫模式 模式 描述 r以讀方式開啟檔案,可讀取檔案資訊。w以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容 a以追加模式開啟檔案 即一開啟檔案,檔案指標自動移到檔案末尾 如果檔案不存在則建立 r 以讀寫方式開啟檔案,可對檔案進行讀和寫操作。w 消除檔案內容,然後以讀寫...

python 讀寫檔案

python讀寫檔案在文字不大的情況可以用正常的 open 然後讀入 readline行讀入 或者整體讀入 read readlines 基本知識 file open path,r 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只...