1. 程式人生 > >python中檔案的I/O操作

python中檔案的I/O操作

簡介
  • I/O – Input/Output 輸入/輸出
  • 讀寫檔案是最常見的IO操作,Python內建了讀寫檔案的函式

    讀 -- 輸出
    寫 -- 輸入
    
  • 在磁碟上讀寫檔案的功能都是由作業系統提供的,作業系統是不允許普通程式直接操作磁碟的,所以,想要讀寫檔案,需要請求作業系統開啟一個檔案物件,然後通過作業系統提供的介面從這個檔案物件中讀取資料(讀檔案)或者 把資料寫入這個檔案(寫檔案)

讀檔案

要以讀檔案的模式開啟一個檔案物件,使用Python內建的open()函式,傳入檔名和標示符:標示符’r’表示讀,這樣,我們就成功地打開了一個檔案。如果檔案不存在,open()函式就會丟擲一個IOError的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在,如果檔案開啟成功,接下來,呼叫read()方法可以一次讀取檔案的全部內容,Python把內容讀到記憶體,用一個str物件表示;最後一步是呼叫close()方法關閉檔案。檔案使用完畢後必須關閉,因為檔案物件會佔用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的:

>>f = open('/Users/michael/test.txt', 'r')
>>f.read()
'Hello, world!'
>>> f.close()

由於檔案讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try … finally來實現:

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

但是每次都這麼寫實在太繁瑣,所以,Python引入了with語句來自動幫我們呼叫close()方法:

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

呼叫read()會一次性讀取檔案的全部內容,如果檔案有10G,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼呼叫。

如果檔案很小,read()一次性讀取最方便;如果不能確定檔案大小,反覆呼叫read(size)比較保險;如果是配置檔案,呼叫readlines()最方便:

for
line in f.readlines(): print(line.strip()) # 把末尾的'\n'刪掉
二進位制檔案

前面講的預設都是讀取文字檔案,並且是UTF-8編碼的文字檔案。要讀取二進位制檔案,比如圖片、視訊等等,用’rb’模式開啟檔案即可:

>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六進位制表示的位元組
字元編碼

要讀取非UTF-8編碼的文字檔案,需要給open()函式傳入encoding引數,例如,讀取GBK編碼的檔案:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
>>> f.read()
'測試'

遇到有些編碼不規範的檔案,你可能會遇到UnicodeDecodeError,因為在文字檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函式還接收一個errors引數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore
寫檔案

寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,傳入識別符號’w’或者’wb’表示寫文字檔案或寫二進位制檔案:

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

你可以反覆呼叫write()來寫入檔案,但是務必要呼叫f.close()來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險:

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

要寫入特定編碼的文字檔案,請給open()函式傳入encoding引數,將字串自動轉換成指定編碼。

細心的童鞋會發現,以’w’模式寫入檔案時,如果檔案已存在,會直接覆蓋(相當於刪掉後新寫入一個檔案)。如果我們希望追加到檔案末尾怎麼辦?可以傳入’a’以追加(append)模式寫入。

相關推薦

linux檔案I-O操作(系統I-O

我們都知道linux下所有裝置都是以檔案存在的,所以當我們需要用到這些裝置的時候,首先就需要開啟它們,下面我們來詳細瞭解一下檔案I/O操作。 用到的檔案I/O有以下幾個操作:開啟檔案、讀檔案、寫檔案、關閉檔案等,對應用到的函式有:open、read、write、close、

用C++實現簡單的檔案I/O操作

檔案 I/O 在C++中比烤蛋糕簡單多了。 在這篇文章裡,我會詳細解釋ASCII和二進位制檔案的輸入輸出的每個細節,值得注意的是,所有這些都是用C++完成的。 一、ASCII 輸出 為了使用下面的方法, 你必須包含標頭檔案<fstream.h>(譯者注:在標準C++中,已

系統程式設計——檔案I/O操作相關API

檔案I/O操作相關API 1.開啟一個檔案open(),既能開啟已存在的檔案,也能建立開啟一個新檔案 函式原型: #include <sys/stat.h> #include <fcntl.h> int open(const char *pathna

JavaI/O操作

首先先了解一下檔案型別,我們都知道資料是以二進位制形式儲存的,但是為了資料處理方便,高階語言中引入了資料型別的概念。檔案也引入了檔案型別的概念。 檔案型別通常是以副檔名體現出來的,每種檔案型別都有一定的格式,代表檔案含義和二進位制之間的對映關係。一個World檔案,其中有文

Linux 系統程式設計學習-檔案I/O操作

一、非緩衝檔案操作 執行非緩衝檔案操作後,應用程式將立即獲取或傳送資料,非緩衝檔案操作的函式只有:read(),write()。 從檔案中將資訊講到到指定的記憶體區域中read(檔案識別符號,記憶體塊指標,記憶體塊長度); 返回值是實際讀取的長度,沒有讀取到資料返回0,錯誤

檔案 I/O操作open、lseek、read、write、close詳解

一,檔案描述符、套接字和管道        對於核心而言,所有開啟的開啟的檔案都通過檔案描述符引用。檔案描述符是一個非負整數。        核心為每個程序維護一個結構體struct task_struct,可稱為程序控制塊(PCB: Process Control Bloc

Linux 之 POSIX 檔案 I/O 操作函式

(1)檔案描述符與檔案流轉換操作 /*成功返回檔案描述符,失敗返回-1*/ int fileno(FILE* stream); /*成功返回檔案流,失敗返回NULL*/ FILE* fdopen(int fd,char* mode); (2)修改檔案描

python檔案的基本操作

檔案的儲存方式 計算機中,檔案是以二進位制的方式儲存的 文字檔案就是可以使用文字編輯器檢視,二進位制檔案無法使用文字編輯器檢視,是提供給其他軟體使用的,例如圖片,音視訊等 操作檔案的套路 1、開啟檔案open open函式負責開啟檔案, 並返回檔案

MATLAB檔案I/O操作——新建TXT並寫入資料

檔案I/O操作:新建文字文件,並存入資料1 2 3 4(三種格式)。 格式一: x=[1 2 3 4];%要存入的資料矩陣。 fp=fopen('A.txt','a');%'A.txt'為檔名;'a

Linux學習之檔案I/O操作

Linux將所有的硬體裝置也當作檔案來處理,因此,檔案輸入輸出也是對裝置進行操作的基礎。檔案的IO有兩種: (1) 非緩衝檔案操作:            這種操作方式便於對較小規模的檔案的讀寫和對實施行要求很高的裝置的資料進行通訊,這類操作是系統呼叫提供的;並且系統只提供

Unix程式設計:檔案I/O操作檔案描述符

Unix系統中大多數檔案I/O需要用到以下五個函式:open,read,write,lseek以及close。這些函式通常被稱為不帶緩衝的I/O(這些函式都是在核心中執行,它們直接對核心快取區進行讀寫)。 檔案描述符 對於核心而言,所有開啟的檔案都通過檔案描述符引用,檔案描

Python檔案路徑名的操作

1 檔案路徑名操作   對於檔案路徑名的操作在程式設計中是必不可少的,比如說,有時候要列舉一個路徑下的檔案,那麼首先就要獲取一個路徑,再就是路徑名的一個拼接問題,通過字串的拼接就可以得到一個路徑名。Python中3.4版本前使用os.path模組中的函式來操作路徑名;3.4版本開始提供pathlib模組,使用

python檔案I/O操作

簡介 I/O – Input/Output 輸入/輸出 讀寫檔案是最常見的IO操作,Python內建了讀寫檔案的函式 讀 -- 輸出 寫 -- 輸入 在磁碟上讀寫檔案的功能都是由作業系統提供的,作業系統是不允許普通程式直接操作磁碟的,所以,想要讀寫檔案

在64-bit 驅動支援32-bit I/O 操作

原文 https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/supporting-32-bit-i-o-in-your-64-bit-driver      

python檔案及其操作(File)

檔案是用於資料儲存的單位 檔案通常用於長期儲存資料 檔案中是以位元組為單位順序儲存資料的 檔案的操作流程 開啟檔案 讀/寫檔案 關閉檔案   注:        任何的作

python檔案的讀和寫操作

一、開啟檔案 data = open("yesterday",encoding="utf-8").read() # python預設的打字元編碼是unicode,處理不了gbk,但是utf—8可以 print(data) ps:這邊的yesterday檔案是一首英文歌的歌詞

python檔案I/O

常用的有:讀取鍵盤輸入,開啟關閉檔案 一、讀取鍵盤輸入(這裡只說2.X版本的用法吧) raw_input() input() 先說raw_input() ,將輸入作為字串看待,返回字串型別,不顯示結尾的符號 input(),可接收一個python表示式返回結果,也可以顯示鍵盤輸入的字元 二、開啟關

Python檔案操作

檔案的開啟和關閉: f = open('test.txt','w') r:以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 w:開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。 a:開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在

Python入門(十)檔案I/O

Python 檔案I/O 本章只講述所有基本的的I/O函式,更多函式請參考Python標準文件。 列印到螢幕 最簡單的輸出方法是用print語句,你可以給它傳遞零個或多個用逗號隔開的表示式。此函式把你傳遞的表示式轉換成一個字串表示式,並將結果寫到標準輸出如下: #!/usr/

檔案I/O讀寫操作

在上一篇文章中,我簡單講述瞭如何進行開啟檔案操作。而在這一篇文章中,我將會對開啟的檔案進行操作。 在進行檔案讀寫操作之前,需要了解一個緩衝區(buff)的概念,緩衝區是在記憶體中預留指定大小的儲存空間用來對I/O的資料做臨時儲存,這部分預留的記憶體空間叫緩衝區