方式一:編碼
f = open('d:\word.txt',mode='r',encoding='utf-8') msg = f.read() f.close() print(msg)
read()將文件中的內容所有讀取出來;弊端:若是文件很大就會很是的佔用內存,容易致使內存奔潰.spa
解決:在r模式下,n按照字符讀取code
f = open('d:\word.txt',mode='r',encoding='utf-8') msg = f.read(3) msg1 = f.read() f.close() print(msg) print(msg1)
方式二:視頻
f = open('word.txt',mode='r',encoding='utf-8') msg1 = f.readline().strip() msg2 = f.readline().strip() msg3 = f.readline().strip() msg4 = f.readline().strip() f.close() print(msg1) print(msg2) print(msg3) print(msg4)
readline()讀取每次只讀取一行,注意點:readline()讀取出來的數據在後面都有一個\n,解決這個問題只須要在咱們讀取出來的文件後邊加一個strip()就OK。blog
方式三;圖片
f = open('word.txt',mode='r',encoding='utf-8') print(f.readlines()) f.close()
readlines() 返回一個列表,列表裏面每一個元素是原文件的每一行,若是文件很大,佔內存,容易崩盤。ip
方式四:內存
能夠經過for循環去讀取,文件句柄是一個迭代器,他的特色就是每次循環只在內存中佔一行的數據,很是節省內存。utf-8
f = open('../path1/弟子規',mode='r',encoding='utf-8') for line in f: print(line) #這種方式就是在一行一行的進行讀取,它就執行了下邊的功能 print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) f.close()
文件操做方式:it
#1. 打開文件的模式有(默認爲文本模式): r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】 w,只寫模式【不可讀;不存在則建立;存在則清空內容】 a, 只追加寫模式【不可讀;不存在則建立;存在則只追加內容】 #2. 對於非文本文件,咱們只能使用b模式,"b"表示以字節的方式操做(而全部文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式) rb wb ab 注:以b方式打開時,讀取到的內容是字節類型,寫入時也須要提供字節類型,不能指定編碼 #3,‘+’模式(就是增長了一個功能) r+, 讀寫【可讀,可寫】 w+,寫讀【可寫,可讀】 a+, 寫讀【可寫,可讀】 #4,以bytes類型操做的讀寫,寫讀,寫讀模式 r+b, 讀寫【可讀,可寫】 w+b,寫讀【可寫,可讀】 a+b, 寫讀【可寫,可讀】
seek()
seek(n)光標移動到n位置,注意: 移動單位是byte,全部若是是utf-8的中文部分要是3的倍數
一般咱們使用seek都是移動到開頭或者結尾
移動到開頭:seek(0)
移動到結尾:seek(0,2) seek的第二個參數表示的是從哪一個位置進行偏移,默認是0,表示開頭,1表示當前位置,2表示結尾
tell()
使用tell()能夠幫咱們獲取當前光標在什麼位置
# 利用with上下文管理這種方式,它會自動關閉文件句柄。 with open('t1',encoding='utf-8') as f1: f1.read() # 一個with 語句能夠操做多個文件,產生多個文件句柄。 with open('t1',encoding='utf-8') as f1,\ open('Test', encoding='utf-8', mode = 'w') as f2: f1.read() f2.write('老男孩老男孩')