Python——文件讀取與寫入


一、文件打開方式

 

打開方式

指針位置

讀取的文件類型

r

只讀(默認模式)

指針在文件開頭,文件不存在則報錯

1. 默認讀取文件都是ASCII編碼的文本文件

2. 如果讀取的文件是二進制文件,如圖片,視頻需要使用'rb'模式

3. 讀取非ASCII編碼的文本文件,必須 以二進制模式打開,再解碼

f=open('E:/test.txt','rb')

f.read().decode('gbk')

 

rb

二進制格式只讀

指針在文件開頭,文件不存在則報錯

r+

可讀可寫

指針在文件開頭,文件不存在則報錯

rb+

二進制格式可讀可寫

指針在文件開頭,文件不存在則報錯

w

只寫

文件存在,則覆蓋;不存在,則創建

wb

二進制格式只寫

文件存在,則覆蓋;不存在,則創建

w+

可讀可寫

文件存在,則覆蓋;不存在,則創建

wb+

二進制格式可讀可寫

文件存在,則覆蓋;不存在,則創建

a

追加

文件存在,指針在文件尾增加;不存在,則創建

ab

二進制格式追加

文件存在,指針在文件尾增加;不存在,則創建

a+

可讀可寫

文件存在,指針在文件尾增加;不存在,則創建

ab+_

二進制格式可讀可寫

文件存在,指針在文件尾增加;不存在,則創建

 

二、文件打開方法

 

舉例

文件不存在

是否需要調用close()方法

注意

Python內置open函數

f=open('E:/test.txt','r')

文件不存在則會IOError

必須書寫調用close()

1.文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也有限

2.當寫文件時,操作系統不會立刻將數據寫入磁盤,而是放內容緩存,空閑時再寫入,只有調用close()方法時,操作數據才會將沒有寫入的數據寫入磁盤。不寫close()方法有可能只寫了一部分數據到磁盤,剩下的數據丟失了

3.文件不存在,可以用tryfinally避免,但與with比較麻煩

 

With語句

with open('E:/test.txt','r') as f:

文件不存在則會IOError

with語句自動調用close()方法

三、文件讀寫定位操作

 

方法

用法

注意

f.read(size)

如果沒有size即f.read()一次性讀取文件全部內容,返回類型str;如果有size即f.read(50)讀取最多的字節內容

1.文件很小,可一次性讀取,文件較大,超過內存大小,內容爆掉

2.文件過大,可用f.read(size),x為每次最多讀取size字節的內容

3.如果是配置文件,調用 readlines()最方便

f.readline()

每次讀取一行內容,返回類型str

f.readlines()

一次讀取所有內容並按行返回list

f.write()

寫文件

將字符串寫入文件,如果寫入結束,需要在字符串后面加上"\n"

定位

f.seek(offset,from_what)

f.seek(2,0)讀取位置向后移動2個字符

from_what值為文件的開始位置,可以省略;offset為偏移量

當前位置

f.tell()

f.tell(),返回當前文件位置

 

四、讀取非ASCII文件,如utf-8,gbk類型

方法1:讀取時指定類型encoding='utf-8'

with open('E:/test1.txt','r',encoding='utf-8') as f

    print(f.read())

結果:

你好

方法2:

必須:1.以二進制模式打開,再解碼

codecs模塊:讀文件時自動轉換編碼,直接讀出unicode

import codecs

with codecs.open('E:/test.txt','rb','utf-8') as f:

f.read()

注意:有些編碼不規范,會遇到UnicodeDecodeError,可能文件中有些非法編碼的字符,遇到這種情況,可用open()函數可以接收errors參數,表示如果遇到編碼錯誤后如何 處理,最簡單方式是直接忽略f=open('E:/test1.txt','r',encoding='gbk',errors='ignore')

五、File對象的屬性 

f.closed

文件已關閉返回true,否則返回false

f.mode

返回被打開文件的訪問模式

f.name

返回文件名稱

 

關注公眾號

免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2023 CODEPRJ.COM