Python2和Python3讀取文本文件的區(qū)別及說明
Python2和3讀取文本文件的區(qū)別
如何讀寫文本文件?
實際案例
- 某文本文件編碼格式已知(如UTF-8,GBK,BIG5)
- 在python 2.x和python 3.x中分別如何讀取該文件?
解決方案
- python 2.x:寫入文件前對unicode編碼,讀入文件后對二進制字符串解碼。
- python 3.x:open函數(shù)指定't'的文本模式,encoding指定編碼格式。
代碼演示
# Python2中的文本文件讀寫 ''' 文本也就是unicode字符串,在寫入文件前要對unicode字符串指定某種格式的編碼, 將它變成str這種形式,python2中str為連續(xù)的字節(jié),只有這些字節(jié)才能存儲到物理設(shè)備上去。 讀取文件的時候就是反過來,讀入的也是一些字節(jié),將其進行解碼還原成unicode也就是文本。 ''' # 寫入文本 f1 = open('py2.txt', 'w') s = u'你好' f1.write(s.encode('gbk')) f1.close() # 讀取文本 f1 = open('py2.txt', 'r') t = f1.read() print(t.decode('gbk')) -------------------------------------------------------------- # Python3中的文本文件讀寫 ''' python3中的字符串定義上更加明確了,原來的str變成了bytes(一系列字節(jié)); 原來的unicode變成了真正意義上的字符串。 python2中定義bytes字符串也就是字節(jié)字符串的時候,只需要這樣寫'sdfsger', 但是在python3中要加一個小b,如:b'sdfsger'。 unicode在python2中前面要加一個小u,這才表示unicode字符產(chǎn),如:u'你好'; 但是在python3中字符串的含義它直接就是unicode字符串,所以不用寫小u,如:'你好'。 這就是Python2和Python3之間字符串的差別 ''' # 寫入文本,t為文本模式不寫也是默認為t打開,格式為utf8 f2 = open('py3.txt', 'wt', encoding='utf8') f2.write('你好,我愛編程。') f2.close() # 讀取文本 f2 = open('py3.txt', 'rt', encoding='utf8') s = f2.read() print(s) ''' Python3中指定encoding會自動幫我們進行編碼和解碼, 而python2中就需要你手動進行編碼和解碼。 '''
python讀取文件(三種方式)
首先,獲取文件對象
file = "F://content.txt" f = open(file, 'r', encoding='utf-8') list = f.readlines()
方法一:直接打印
# 方法1:直接打印 print(list)
方法二:while循環(huán)
print('----------方法2:while循環(huán)1----------------') # 方法2:while循環(huán) f = open(file, 'r', encoding='utf-8') while True: line = f.readline() if len(line)==0: break print(line.strip('\n')) print('----------方法2:while循環(huán)2----------------') while length>0: print(list[i][:-1]) i+=1 length-=1
方法三:for循環(huán)
# 方法3:for循環(huán) for i in list: print(i.strip())
所有代碼:
file = "F://content.txt" f = open(file, 'r', encoding='utf-8') list = f.readlines() print('-------------方法1:直接打印----------------') # 方法1:直接打印 print(list) length = len(list) i=0 print('----------方法2:while循環(huán)1----------------') # 方法2:while循環(huán) file = "F://content.txt" while True: line = f.readline() if len(line)==0: break print(line.strip('\n')) print('----------方法2:while循環(huán)2----------------') while length>0: print(list[i][:-1]) i+=1 length-=1 print('---------方法3:for循環(huán)-------------------') # 方法3:for循環(huán) for i in list: print(i.strip())
測試文本:
bbb aa dd
cc aa cc
aa dd ee
dfs dfs dfs
運行結(jié)果:
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)將元組中的元素作為參數(shù)傳入函數(shù)的操作
這篇文章主要介紹了Python實現(xiàn)將元組中的元素作為參數(shù)傳入函數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Matplotlib自定義坐標(biāo)軸刻度的實現(xiàn)示例
這篇文章主要介紹了Matplotlib自定義坐標(biāo)軸刻度的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06關(guān)于numpy.polyfit()與Stats.linregress()方法最小二乘近似擬合斜率對比
這篇文章主要介紹了關(guān)于numpy.polyfit()與Stats.linregress()方法最小二乘近似擬合斜率對比,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04python強大的hook函數(shù)使用及應(yīng)用場景
鉤子函數(shù)(hook function)是把我們自己實現(xiàn)的hook函數(shù)在某一時刻掛接到目標(biāo)掛載點上,這篇文章主要介紹了python強大的hook函數(shù)使用及應(yīng)用場景,需要的朋友可以參考下2023-05-05Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
這篇文章主要介紹了Python __setattr__、 __getattr__、 __delattr__、__call__用法示例,本文分別對這幾個魔法方法做了講解,需要的朋友可以參考下2015-03-03Python 基于FIR實現(xiàn)Hilbert濾波器求信號包絡(luò)詳解
今天小編就為大家分享一篇Python 基于FIR實現(xiàn)Hilbert濾波器求信號包絡(luò)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02超詳細,教你用python語言實現(xiàn)QQ機器人制作教程
這篇文章主要介紹了如何python語言實現(xiàn)QQ機器人,用圖文詳細的描述了其中的操作步驟,非常的簡單易上手,有需要的朋友可以參考下2021-08-08