一:Python中讀寫檔案的方法
1.open()函數open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
- file : 是一個 path-like object,表示将要打開的檔案的路徑,可以是絕對路徑也可以是相對路徑,也可以是要被封裝的整數類型檔案描述符。如果是檔案描述符,它會随着傳回檔案對象關閉而關閉,除非 closefd 被設為 False 。
- mode:檔案打開的模式

'r':讀取檔案(預設)
'w':向檔案寫入,并先截斷檔案
'x' 排它性建立 一個檔案,如果檔案已經存在則失敗
'a':在檔案末尾追加寫入
'b':二進制模式
't':文本模式(預設)
'+':可讀也可以寫
- buffering
buffering 是一個可選的整數,用于設定緩沖政策。
- 傳遞0以切換緩沖關閉(僅允許在二進制模式下)
- 選擇行緩沖(僅在文本模式下可用),
- 并且>1的整數以訓示固定大小的塊緩沖區的大小(以位元組為機關)。
- 如果沒有給出 buffering 參數,則預設緩沖政策的工作方式如下:
- 二進制檔案以固定大小的塊進行緩沖;使用啟發式方法選擇緩沖區的大小,嘗試确定底層裝置的“塊大小”或使用
。在許多系統上,緩沖區的長度通常為4096或8192位元組。io.DEFAULT_BUFFER_SIZE
- “互動式”文本檔案(
傳回isatty()
的檔案)使用行緩沖。其他文本檔案和二進制檔案一樣。True
- encoding
encoding 是用于解碼或編碼檔案的編碼的名稱。僅僅在文本模式下使用。預設編碼是依賴于平台的(不管 locale.getpreferredencoding() 傳回何值)。
可以使用任何Python支援的 text encoding 。有關支援的編碼清單,請參閱 codecs 子產品。
例如:f=open('/Users/michael/notfound.txt', 'r')
f.read()
f.close()
2. with 關鍵字 在處理檔案對象時,最好使用
with
關鍵字。
優點:1.當子句體結束後檔案會正确關閉,即使在某個時刻引發了異常也能關閉。
2.
with
相比等效的
try
-
finally
代碼塊要簡短得多:
with open('workfile') as f:
read_data = f.read()
f.closed
3.檔案對象的方法 f.read(size) 調用
f.read(size)
讀取檔案内容,在文本模式下,它會讀取一些資料并将其作為字元串傳回,在二進制模式下,将資料作為位元組串對象傳回。
size是一個可選的數值參數。
- 當size被省略或者為負數時,将讀取并傳回整個檔案的内容;
如果檔案的大小是你的機器記憶體的兩倍就會出現問題。
- 當取其他值時,将讀取并傳回至多size個字元(在文本模式下)或size個位元組(在二進制模式下)。
- 如果已到達檔案末尾,
将傳回一個空字元串 (f.read()
)。''
>>> f.read()
'This is the entire file.n'
>>> f.read()
''
f.readline() 讀取檔案的一行。如果到達檔案的末尾就傳回一個空的字元串。如果讀取一個空行,就使用
'n'
表示,即該字元串隻包含一個換行符。
>>> f.readline()
'This is the first line of the file.n'
>>> f.readline()
'Second line of the filen'
>>> f.readline()
''
如果要逐行讀取檔案,也可以一下方法:
>>> for line in f:
... print(line, end='')
...
This is the first line of the file.
Second line of the file
f.write(string) 會把 string 的内容寫入到檔案中,并傳回寫入的字元數。:
>>> f.write('This is a testn')
15
在寫入其他類型的對象之前,在文本模式下,需要先把它們轉化為字元串,在二進制模式下,需要先把它們轉化為位元組對象
>>> value = ('the answer', 42)
>>> s = str(value) # convert the tuple to string
>>> f.write(s)
18
讀寫2進制檔案(圖檔) >>> f= open("./440.jpeg",'rb')
>>> a=f.read()
>>> len(a)
11024
>>> f2=open('./person.jpeg','wb')
>>> f2.write(a)
11024
f.tell() f.tell()
傳回一個整數,給出檔案對象在檔案中的目前位置,在二進制模式下為從檔案開始的位元組數,以及文本模式下從檔案開始的字元數。
f.seek(offset, whence)要改變檔案對象的位置,請使用
f.seek(offset,
whence)
。 通過向一個參考點添加 offset 來計算位置;參考點由 whence 參數指定。
- whence 的 0 值表示從檔案開頭起算,
- 1 表示使用目前檔案位置,
- 2 表示使用檔案末尾作為參考點。
- whence 如果省略則預設值為 0,即使用檔案開頭作為參考點。
>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5) # Go to the 6th byte in the file
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # Go to the 3rd byte before the end
13
>>> f.read(1)
b'd'
字元檔案 >>> f.write("this is a txtn")
14
#剛寫完檔案是以在最後一位
>>> f.tell()
15
#讀一個位元組,為空字元串
>>> f.read(1)
''
#設定檔案指針到位置0
>>> f.seek(0)
0
>>> f.tell()
0
#讀一個字元
>>> f.read(1)
't'
>>> f.read(2)
'hi'
>>> f.tell()
3
>>> f.read()
's is a txtn'
>>> f.tell()
15
二:numpy中讀寫檔案的方法
NumPy二進制檔案(NPY,NPZ)
在python中有兩種二進制檔案:npy和npz檔案,npy檔案儲存一個array,npz儲存多個array,
并且可以指定關鍵字,預設的關鍵字是0,1,2.....
npy檔案:>>> np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]]))
>>> np.load('/tmp/123.npy')
array([[1, 2, 3],
[4, 5, 6]])
npz檔案: >>> a=np.array([[1, 2, 3], [4, 5, 6]])
>>> b=np.array([1, 2])
>>> np.savez('/tmp/123.npz', a=a, b=b)
>>> data = np.load('/tmp/123.npz')
>>> data['a']array([[1, 2, 3],
[4, 5, 6]])
>>> data['b']
array([1, 2])
>>> data.close()