国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python中open()函數(shù)指定文件打開方式的用法

2019-11-25 16:45:33
字體:
供稿:網(wǎng)友

文件打開方式

當(dāng)我們用open()函數(shù)去打開文件的時(shí)候,有好幾種打開的模式。

'r'->只讀
'w'->只寫,文件已存在則清空,不存在則創(chuàng)建。
'a'->追加,寫到文件末尾
'b'->二進(jìn)制模式,比如打開圖像、音頻、word文件。
'+'->更新(可讀可寫)

這個(gè)帶'+'號(hào)的有點(diǎn)難以理解,上代碼感受下。

with open('foo.txt', 'w+') as f:   f.write('bar/n')   f.seek(0)    data = f.read() 

可以看到,上面這段代碼,它不但可以寫,還可以讀出來。注意要先定位到開頭,f.seek(0),不然讀出來的是空數(shù)據(jù)。
一些人可能會(huì)有迷惑,既然帶'+'號(hào)是可讀可寫,那'w+'跟'r+'有什么不同。
那就是,
'w+'會(huì)清空,會(huì)創(chuàng)建 (文件已存在則清空,不存在則創(chuàng)建。)
'r+'不清空,不創(chuàng)建

不要用二進(jìn)制模式打開文本文件
先看下面代碼的“詭異”現(xiàn)象。
假設(shè)在windows下,我有個(gè)f.txt文件,里面的內(nèi)容是下面這樣的。

helloworld

代碼一,

with open('f.txt', 'r') as f:   print f.readlines() with open('f.txt', 'rb') as f:   print f.readlines() 

輸出

['hello/n', 'world/n']['hello/r/n', 'world/r/n']

代碼二,

with open('f.txt', 'rb') as f:   data = f.read() with open('f.txt', 'w') as f:   f.write(data) 

打開文件,變成了下面這樣,

hello^Mworld^M

首先,先理解換行符'/n'跟回車符'/r'的概念。
'/n',換行符(LF,Line-Feed ),指新的一行。
'/r',回車符(CR,Carriage-Return),指回到行頭。

因?yàn)樵诓煌到y(tǒng)下的換行標(biāo)識(shí)是不一樣的。

windows->'/r/n'unix->'/n'mac->'/r'

這就是為什么windows下的txt在linux打開的時(shí)候行尾會(huì)有'^M'。
這就是為什么我在linux下跑腳本導(dǎo)出游戲數(shù)據(jù)下到本地windows打開變成了一行。

其實(shí)文本文件也是二進(jìn)制文件,是文本編碼的二進(jìn)制文件,文本文件對(duì)一些不可見字符進(jìn)行了處理,增加可讀性。

在python中,可以通過os.linesep獲得當(dāng)前系統(tǒng)的換行標(biāo)識(shí)。比如在windows下,os.linesep是'/r/n'。
在python中操作換行標(biāo)識(shí)的時(shí)候,并不用管是在什么平臺(tái)下,直接用'/n'就行了,python會(huì)自動(dòng)根據(jù)不同系統(tǒng)轉(zhuǎn)成不同標(biāo)識(shí)。

有了上面這些理論依據(jù),就可以解析本文開頭代碼的“詭異”現(xiàn)象了。
代碼一中,用文本模式打開的文件,換行標(biāo)識(shí)會(huì)被python處理成'/n',而用二進(jìn)制模式打開則原封不動(dòng)。
代碼二中,用二進(jìn)制模式打開,用文本模式寫入。二進(jìn)制打開原封不動(dòng)還是'/r/n',而文本模式寫入的時(shí)候因?yàn)閜ython會(huì)把'/n'轉(zhuǎn)成'/r/n',所以其實(shí)就等于是寫入了'/r/r/n',于是就多了個(gè)'^M'。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新龙县| 台中市| 临颍县| 海阳市| 洛隆县| 蕲春县| 黔西县| 定日县| 芦溪县| 嘉兴市| 新闻| 莆田市| 襄垣县| 共和县| 呼和浩特市| 乃东县| 富裕县| 乳山市| 合阳县| 专栏| 玉山县| 鄂伦春自治旗| 长宁县| 平舆县| 乌什县| 定结县| 平凉市| 梨树县| 临沭县| 石柱| 镇康县| 定远县| 儋州市| 图片| 祁阳县| 敦煌市| 绍兴市| 望奎县| 离岛区| 将乐县| 弥渡县|