亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

文件打開方式

當(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)容是下面這樣的。

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),指回到行頭。

因?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'。

相關(guān)文章

  • 一文帶你了解Python中pymysql的使用

    一文帶你了解Python中pymysql的使用

    pymysql就是聯(lián)通mysql實(shí)現(xiàn)python窗口與mysql數(shù)據(jù)庫(kù)交互的庫(kù),十分方便操作,這篇文章將詳細(xì)說明如何掌握并使用該庫(kù),感興趣的可以了解一下
    2023-02-02
  • python實(shí)現(xiàn)自動(dòng)生成C++代碼的代碼生成器

    python實(shí)現(xiàn)自動(dòng)生成C++代碼的代碼生成器

    這篇文章介紹了python實(shí)現(xiàn)C++代碼生成器的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • next在python中返回迭代器的實(shí)例方法

    next在python中返回迭代器的實(shí)例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于next在python中返回迭代器的實(shí)例方法,有興趣的朋友們可以嘗試下。
    2020-12-12
  • Python之如何調(diào)整圖片的文件大小

    Python之如何調(diào)整圖片的文件大小

    這篇文章主要介紹了Python之如何調(diào)整圖片的文件大小問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-03-03
  • Python 隨機(jī)按鍵模擬2小時(shí)

    Python 隨機(jī)按鍵模擬2小時(shí)

    這篇文章主要介紹了Python 隨機(jī)按鍵模擬的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python中時(shí)間轉(zhuǎn)換datetime和pd.to_datetime詳析

    python中時(shí)間轉(zhuǎn)換datetime和pd.to_datetime詳析

    這篇文章主要給大家介紹了關(guān)于python中時(shí)間轉(zhuǎn)換datetime和pd.to_datetime的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python not關(guān)鍵字實(shí)例用法

    python not關(guān)鍵字實(shí)例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于python not關(guān)鍵字實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • Python count()函數(shù)實(shí)例詳解

    Python count()函數(shù)實(shí)例詳解

    count() 是Python的內(nèi)置函數(shù),可以「統(tǒng)計(jì)」字符串里指定「字符」或指定字符串出現(xiàn)的「次數(shù)」,這篇文章主要介紹了Python count()函數(shù)詳解,需要的朋友可以參考下
    2023-07-07
  • Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法

    Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法

    本文主要介紹了Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Selenium爬取b站主播頭像并以昵稱命名保存到本地

    Selenium爬取b站主播頭像并以昵稱命名保存到本地

    這篇文章主要介紹了使用Selenium自動(dòng)化爬取b站主播頭像并以昵稱命名保存到本地的方法,代碼簡(jiǎn)單完整,對(duì)于大家練習(xí)Selenium自動(dòng)化有一定的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論