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

淺談Python3中打開(kāi)文件的方式(With open)

 更新時(shí)間:2022年08月19日 09:47:37   作者:hello-alien  
本文主要介紹了淺談Python3中打開(kāi)文件的方式(With open),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

0.背景知識(shí)

  • python文件讀寫(xiě)文件是最常見(jiàn)的IO操作。Python內(nèi)置了讀寫(xiě)文件的函數(shù),用法和C是兼容的。
  • 讀寫(xiě)文件前,我們先必須了解一下,在磁盤上讀寫(xiě)文件的功能都是由操作系統(tǒng)提供的,現(xiàn)代操作系統(tǒng)不允許普通的程序直接操作磁盤。
  • 讀寫(xiě)文件就是請(qǐng)求操作系統(tǒng)打開(kāi)一個(gè)文件對(duì)象(通常稱為文件描述符),然后,通過(guò)操作系統(tǒng)提供的接口從這個(gè)文件對(duì)象中讀取數(shù)據(jù)(讀文件),或者把數(shù)據(jù)寫(xiě)入這個(gè)文件對(duì)象(寫(xiě)文件)

常見(jiàn)的IO操作的類型如下:

typeinfo
r以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
w打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
a打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。
rb以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
wb以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
ab以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。
r+打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。
w+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
a+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。
rb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。
wb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
ab+以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。

1.常規(guī)方式:讀取文件-----open()

step1: 打開(kāi)

f = open( '/Users/michael/test.txt', 'r' )

r 表示讀取文件,我們就成功地打開(kāi)了一個(gè)文件

但是, 如果文件不存在,open()函數(shù)就會(huì)拋出一個(gè)IOError的錯(cuò)誤,并且給出錯(cuò)誤碼和詳細(xì)的信息告訴你文件不存在,錯(cuò)誤情況如下:

f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

step2: 讀取

如果文件打開(kāi)成功,接下來(lái),調(diào)用read()方法可以一次讀取文件的全部?jī)?nèi)容,Python把內(nèi)容讀到內(nèi)存,用一個(gè)str對(duì)象表示:

f.read()
'Hello, world!'

step3: 關(guān)閉

最后一步是調(diào)用close()方法關(guān)閉文件。文件使用完畢后必須關(guān)閉,因?yàn)槲募?duì)象會(huì)占用操作系統(tǒng)的資源,并且操作系統(tǒng)同一時(shí)間能打開(kāi)的文件數(shù)量也是有限的:

f.close()

由于文件讀寫(xiě)時(shí)都有可能產(chǎn)生IOError,一旦出錯(cuò),后面的f.close()就不會(huì)調(diào)用。所以,為了保證無(wú)論是否出錯(cuò)都能正確地關(guān)閉文件,我們可以使用try … finally來(lái)實(shí)現(xiàn):

最終方案:

try:
	f = open('/path/to/file', 'r')
	print(f.read())
finally:
	if f:
		f.close()

2.推薦方式:讀取文件-----With Open

1).讀取方式

每次如果都按照如上最終方案去寫(xiě)的話,實(shí)在太繁瑣。Python引入了with語(yǔ)句來(lái)自動(dòng)幫我們調(diào)用close()方法
重點(diǎn):?。?!with 的作用就是自動(dòng)調(diào)用close()方法 !?。?/p>

with open( '/path/to/file', 'r' ) as f:
	print( f.read() ) 

# 這和前面的try ... finally是一樣的,但是代碼更佳簡(jiǎn)潔,并且不必調(diào)用f.close()方法
  • f.read(): 讀取全部文件內(nèi)容
  • f.read(size): 每次讀取size個(gè)字節(jié)內(nèi)容
  • f.readline(): 每次讀取一行的內(nèi)容
  • f.readlines(): 讀取全部?jī)?nèi)容,但結(jié)果是個(gè)list,每行內(nèi)容是一個(gè)元素

如果遇到超大文件,需要注意:

  • 調(diào)用read()會(huì)一次性讀取文件的全部?jī)?nèi)容,如果文件有10G,內(nèi)存就爆了。
  • 要保險(xiǎn)起見(jiàn),可以反復(fù)調(diào)用read(size)方法,每次最多讀取size個(gè)字節(jié)的內(nèi)容。例如,read(1024) 每次讀取1024個(gè)字節(jié)的數(shù)據(jù)內(nèi)容
  • 調(diào)用readline()可以每次讀取一行內(nèi)容,調(diào)用readlines()一次讀取所有內(nèi)容并按行返回list。因此,要根據(jù)需要決定怎么調(diào)用。
  • 如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復(fù)調(diào)用read(size)比較保險(xiǎn);如果是配置文件,調(diào)用readlines()最方便:
for line in f.readlines():
	print( line.strip() ) 


# 讀取文件之后,文字末尾會(huì)出現(xiàn)'\n'
# strip() 函數(shù)中可以把目標(biāo)內(nèi)容line里面所有的空格,空行等都刪除掉,只剩余文字內(nèi)容

2).常見(jiàn)的坑

讀取靜態(tài)文件的函數(shù),最好不要寫(xiě)相對(duì)路徑?。?!

(1)如上圖,F(xiàn)old001文件夾下面有個(gè)read_file.py文件,這個(gè)文件讀取hello.txt文件,代碼如上圖,這樣可以正常引用
(2)但如果引用靜態(tài)文件的函數(shù),被其他函數(shù)再次調(diào)用的時(shí)候。 例如被Fold002里面的函數(shù)read.py調(diào)用,那么readfile()函數(shù)相當(dāng)于是在read.py所在目錄執(zhí)行的,那么靜態(tài)文件hello.txt相對(duì)于read.py的路徑,就不是上圖的路徑了,否者會(huì)運(yùn)行會(huì)報(bào)錯(cuò),如下

3).跳過(guò)第一行內(nèi)容(字段名)

  with open(file_path, 'r', encoding='utf-8-sig') as f:
      next(f)						# 最終讀取到的內(nèi)容,直接跳過(guò)第一行了
      all_line_list = f.readlines()

3.寫(xiě)入內(nèi)容----open()函數(shù)

寫(xiě)文件和讀文件是一樣的,唯一區(qū)別是調(diào)用open()函數(shù)時(shí),傳入標(biāo)識(shí)符’w’或者’wb’表示寫(xiě)文本文件或?qū)懚M(jìn)制文件:

f = open('/Users/michael/test.txt', 'w')
f.write('Hello, world!')
f.close()

open函數(shù)使用注意地方:

  • 你可以反復(fù)調(diào)用write()來(lái)寫(xiě)入文件,但是務(wù)必要調(diào)用f.close()來(lái)關(guān)閉文件。
  • 當(dāng)我們寫(xiě)文件時(shí),操作系統(tǒng)往往不會(huì)立刻把數(shù)據(jù)寫(xiě)入磁盤,而是放到內(nèi)存緩存起來(lái),空閑的時(shí)候再慢慢寫(xiě)入。
  • 只有調(diào)用close()方法時(shí),操作系統(tǒng)才保證把沒(méi)有寫(xiě)入的數(shù)據(jù)全部寫(xiě)入磁盤。忘記調(diào)用close()的后果是數(shù)據(jù)可能只寫(xiě)了一部分到磁盤,剩下的丟失了。所以,還是用with語(yǔ)句來(lái)得保險(xiǎn)

4.寫(xiě)入內(nèi)容----- With Open函數(shù)

with open('/Users/michael/test.txt', 'w') as f:
	f.write('Hello, world!')

要寫(xiě)入特定編碼的文本文件,請(qǐng)給open()函數(shù)傳入encoding參數(shù),將字符串自動(dòng)轉(zhuǎn)換成指定編碼字符編碼

5.打開(kāi)非utf-8編碼的文件

要讀取非UTF-8編碼的文本文件,需要給open()函數(shù)傳入encoding參數(shù),例如,讀取GBK編碼的文件:

with open('/Users/michael/gbk.txt', 'r', encoding='gbk') as f:
    f.read()
  • 遇到有些編碼不規(guī)范的文件,你可能會(huì)遇到UnicodeDecodeError,因?yàn)樵谖谋疚募锌赡軍A雜了一些非法編碼的字符。
  • open()函數(shù)還接收一個(gè)errors參數(shù),errors=‘ignore’ 表示遇到編碼錯(cuò)誤的時(shí)候直接忽略
with open('/Users/michael/gbk.txt', 'r', encoding='gbk',errors='ignore') as f:
    f.read()

6.打開(kāi)二進(jìn)制文件

前面講的默認(rèn)都是讀取文本文件,并且是UTF-8編碼的文本文件。要讀取二進(jìn)制文件,比如圖片、視頻等等,用’rb’模式打開(kāi)文件即可:

with open('/Users/michael/test.jpg', 'rb') as f:
    f.read()

#  b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...'            十六進(jìn)制表示的字節(jié)

到此這篇關(guān)于淺談Python3中打開(kāi)文件的方式(With open)的文章就介紹到這了,更多相關(guān)Python3 打開(kāi)文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jupyter notebook 使用過(guò)程中python莫名崩潰的原因及解決方式

    jupyter notebook 使用過(guò)程中python莫名崩潰的原因及解決方式

    這篇文章主要介紹了jupyter notebook 使用過(guò)程中python莫名崩潰的原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • jupyter 中文亂碼設(shè)置編碼格式 避免控制臺(tái)輸出的解決

    jupyter 中文亂碼設(shè)置編碼格式 避免控制臺(tái)輸出的解決

    這篇文章主要介紹了jupyter 中文亂碼設(shè)置編碼格式 避免控制臺(tái)輸出的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python海龜繪圖詳解

    Python海龜繪圖詳解

    python2.6版本中后引入的一個(gè)簡(jiǎn)單的繪圖工具,叫做海龜繪圖(Turtle Graphics),出現(xiàn)在1966年的Logo計(jì)算機(jī)語(yǔ)言。海龜繪圖(turtle庫(kù))是python的內(nèi)部模塊,使用前導(dǎo)入即可。本文就帶大家深入了解一下海龜繪圖,快來(lái)跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • 淺談Python小波分析庫(kù)Pywavelets的一點(diǎn)使用心得

    淺談Python小波分析庫(kù)Pywavelets的一點(diǎn)使用心得

    這篇文章主要介紹了淺談Python小波分析庫(kù)Pywavelets的一點(diǎn)使用心得,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 利用Python多線程實(shí)現(xiàn)圖片下載器

    利用Python多線程實(shí)現(xiàn)圖片下載器

    這篇文章主要介紹了利用Python多線程制作的圖片下載器的相關(guān)代碼,文中展示的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-03-03
  • 基于Flask框架添加多個(gè)AI模型的API并進(jìn)行交互

    基于Flask框架添加多個(gè)AI模型的API并進(jìn)行交互

    這篇文章主要介紹了如何基于 Flask 框架開(kāi)發(fā) AI 模型 API 管理系統(tǒng),允許用戶添加、刪除不同 AI 模型的 API 密鑰,感興趣的可以了解下
    2025-03-03
  • 使用python-docx在word文檔中查找書(shū)簽,并在書(shū)簽處寫(xiě)入數(shù)據(jù)方式

    使用python-docx在word文檔中查找書(shū)簽,并在書(shū)簽處寫(xiě)入數(shù)據(jù)方式

    使用python-docx庫(kù),可在Word文檔中查找書(shū)簽并寫(xiě)入數(shù)據(jù)。首先打開(kāi)文檔,通過(guò)bookmarks屬性獲取書(shū)簽對(duì)象,然后使用書(shū)簽名定位書(shū)簽位置,最后將數(shù)據(jù)寫(xiě)入書(shū)簽處。這種方法適合自動(dòng)化填充Word模板等場(chǎng)景
    2024-09-09
  • python利用 pytesseract快速識(shí)別提取圖片中的文字((圖片識(shí)別)

    python利用 pytesseract快速識(shí)別提取圖片中的文字((圖片識(shí)別)

    本文介紹了tesseract的python調(diào)用,也就是pytesseract庫(kù),其中還有一些其他的內(nèi)容并沒(méi)有涉及,僅涉及到了圖片提取文字,如果你對(duì)其感興趣,可以深入探索一下,也希望能和我探討一下
    2022-11-11
  • 在Python的web框架中中編寫(xiě)日志列表的教程

    在Python的web框架中中編寫(xiě)日志列表的教程

    這篇文章主要介紹了在Python中編寫(xiě)日志列表的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • python日期與時(shí)間戳的各種轉(zhuǎn)換示例

    python日期與時(shí)間戳的各種轉(zhuǎn)換示例

    這篇文章主要介紹了python日期與時(shí)間戳的各種轉(zhuǎn)換示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論

临清市| 获嘉县| 田东县| 油尖旺区| 休宁县| 慈利县| 林州市| 吉隆县| 合作市| 永年县| 邢台市| 黎平县| 苍溪县| 鹿邑县| 厦门市| 泰顺县| 历史| 蓬溪县| 湘潭县| 新干县| 松原市| 高雄市| 贵定县| 南平市| 井陉县| 大荔县| 布拖县| 龙游县| 黔西县| 西乌珠穆沁旗| 普宁市| 德江县| 新巴尔虎左旗| 闻喜县| 邵阳市| 莫力| 平舆县| 南开区| 神木县| 家居| 宿迁市|