中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3中打開文件的方式有哪些

發布時間:2022-08-26 11:31:34 來源:億速云 閱讀:231 作者:iii 欄目:開發技術

這篇文章主要講解了“Python3中打開文件的方式有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python3中打開文件的方式有哪些”吧!

    0.背景知識

    • python文件讀寫文件是最常見的IO操作。Python內置了讀寫文件的函數,用法和C是兼容的。

    • 讀寫文件前,我們先必須了解一下,在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤。

    • 讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然后,通過操作系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)

    常見的IO操作的類型如下:

    typeinfo
    r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
    w打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
    a打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
    rb以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式。
    wb以二進制格式打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
    ab以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
    r+打開一個文件用于讀寫。文件指針將會放在文件的開頭。
    w+打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
    a+打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用于讀寫。
    rb+以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。
    wb+以二進制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
    ab+以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用于讀寫。

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

    step1: 打開

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

    r 表示讀取文件,我們就成功地打開了一個文件

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

    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: 讀取

    如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示:

    f.read()
    'Hello, world!'

    step3: 關閉

    最后一步是調用close()方法關閉文件。文件使用完畢后必須關閉,因為文件對象會占用操作系統的資源,并且操作系統同一時間能打開的文件數量也是有限的:

    f.close()

    由于文件讀寫時都有可能產生IOError,一旦出錯,后面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try &hellip; finally來實現:

    最終方案:

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

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

    1).讀取方式

    每次如果都按照如上最終方案去寫的話,實在太繁瑣。Python引入了with語句來自動幫我們調用close()方法
    重點:!!!with 的作用就是自動調用close()方法 !!!

    with open( '/path/to/file', 'r' ) as f:
    	print( f.read() ) 
    
    # 這和前面的try ... finally是一樣的,但是代碼更佳簡潔,并且不必調用f.close()方法
    • f.read(): 讀取全部文件內容

    • f.read(size): 每次讀取size個字節內容

    • f.readline(): 每次讀取一行的內容

    • f.readlines(): 讀取全部內容,但結果是個list,每行內容是一個元素

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

    • 調用read()會一次性讀取文件的全部內容,如果文件有10G,內存就爆了。

    • 要保險起見,可以反復調用read(size)方法,每次最多讀取size個字節的內容。例如,read(1024) 每次讀取1024個字節的數據內容

    • 調用readline()可以每次讀取一行內容,調用readlines()一次讀取所有內容并按行返回list。因此,要根據需要決定怎么調用。

    • 如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復調用read(size)比較保險;如果是配置文件,調用readlines()最方便:

    for line in f.readlines():
    	print( line.strip() ) 
    
    
    # 讀取文件之后,文字末尾會出現'\n'
    # strip() 函數中可以把目標內容line里面所有的空格,空行等都刪除掉,只剩余文字內容

    2).常見的坑

    Python3中打開文件的方式有哪些

    讀取靜態文件的函數,最好不要寫相對路徑!!!

    (1)如上圖,Fold001文件夾下面有個read_file.py文件,這個文件讀取hello.txt文件,代碼如上圖,這樣可以正常引用
    (2)但如果引用靜態文件的函數,被其他函數再次調用的時候。 例如被Fold002里面的函數read.py調用,那么readfile()函數相當于是在read.py所在目錄執行的,那么靜態文件hello.txt相對于read.py的路徑,就不是上圖的路徑了,否者會運行會報錯,如下

    Python3中打開文件的方式有哪些

    3).跳過第一行內容(字段名)

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

    3.寫入內容----open()函數

    寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符&rsquo;w&rsquo;或者&rsquo;wb&rsquo;表示寫文本文件或寫二進制文件:

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

    open函數使用注意地方:

    • 你可以反復調用write()來寫入文件,但是務必要調用f.close()來關閉文件。

    • 當我們寫文件時,操作系統往往不會立刻把數據寫入磁盤,而是放到內存緩存起來,空閑的時候再慢慢寫入。

    • 只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁盤。忘記調用close()的后果是數據可能只寫了一部分到磁盤,剩下的丟失了。所以,還是用with語句來得保險

    4.寫入內容----- With Open函數

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

    要寫入特定編碼的文本文件,請給open()函數傳入encoding參數,將字符串自動轉換成指定編碼字符編碼

    5.打開非utf-8編碼的文件

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

    with open('/Users/michael/gbk.txt', 'r', encoding='gbk') as f:
        f.read()
    • 遇到有些編碼不規范的文件,你可能會遇到UnicodeDecodeError,因為在文本文件中可能夾雜了一些非法編碼的字符。

    • open()函數還接收一個errors參數,errors=&lsquo;ignore&rsquo; 表示遇到編碼錯誤的時候直接忽略

    with open('/Users/michael/gbk.txt', 'r', encoding='gbk',errors='ignore') as f:
        f.read()

    6.打開二進制文件

    前面講的默認都是讀取文本文件,并且是UTF-8編碼的文本文件。要讀取二進制文件,比如圖片、視頻等等,用&rsquo;rb&rsquo;模式打開文件即可:

    with open('/Users/michael/test.jpg', 'rb') as f:
        f.read()
    
    #  b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...'            十六進制表示的字節

    感謝各位的閱讀,以上就是“Python3中打開文件的方式有哪些”的內容了,經過本文的學習后,相信大家對Python3中打開文件的方式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    祁连县| 宁海县| 桦甸市| 民乐县| 合作市| 黔西| 达州市| 华蓥市| 新野县| 邳州市| 喀喇沁旗| 棋牌| 华容县| 鲜城| 枣阳市| 互助| 泸西县| 台安县| 小金县| 囊谦县| 武安市| 岳西县| 金乡县| 克拉玛依市| 连江县| 四子王旗| 梨树县| 安新县| 乌兰察布市| 和田县| 阿瓦提县| 开鲁县| 麻栗坡县| 红桥区| 自治县| 宾川县| 濮阳县| 建德市| 温泉县| 封丘县| 深州市|