最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年06月04日 11:16:37   作者:mattkang  
well,我們這里所指的文件打開方式并不是指調(diào)用什么應(yīng)用程序去打開某個文件,而是只讀只寫或者二進(jìn)制等的打開方式,這里我們就來詳解Python中open()函數(shù)指定文件打開方式的用法

文件打開方式

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

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

這個帶'+'號的有點難以理解,上代碼感受下。

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

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

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

hello
world

代碼一,

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^M
world^M

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

因為在不同系統(tǒng)下的換行標(biāo)識是不一樣的。

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

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

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

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

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

相關(guān)文章

最新評論

惠州市| 天峨县| 苗栗县| 彩票| 应用必备| 中卫市| 克山县| 和政县| 涿州市| 洛南县| 巫溪县| 香港 | 柘荣县| 云阳县| 昔阳县| 墨脱县| 枞阳县| 雷山县| 志丹县| 阿拉善右旗| 丰县| 简阳市| 兰坪| 疏附县| 金塔县| 长乐市| 西乌| 温泉县| 洪江市| 武夷山市| 大冶市| 来安县| 太保市| 龙山县| 锦州市| 资阳市| 堆龙德庆县| 腾冲县| 柳林县| 定边县| 清苑县|