天天看點

.npy檔案_python——檔案讀寫

一: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:檔案打開的模式
.npy檔案_python——檔案讀寫

'r':讀取檔案(預設)

'w':向檔案寫入,并先截斷檔案

'x' 排它性建立 一個檔案,如果檔案已經存在則失敗

'a':在檔案末尾追加寫入

'b':二進制模式

't':文本模式(預設)

'+':可讀也可以寫

  • buffering

buffering 是一個可選的整數,用于設定緩沖政策。

  1. 傳遞0以切換緩沖關閉(僅允許在二進制模式下)
  2. 選擇行緩沖(僅在文本模式下可用),
  3. 并且>1的整數以訓示固定大小的塊緩沖區的大小(以位元組為機關)。
  4. 如果沒有給出 buffering 參數,則預設緩沖政策的工作方式如下:
  • 二進制檔案以固定大小的塊進行緩沖;使用啟發式方法選擇緩沖區的大小,嘗試确定底層裝置的“塊大小”或使用

    io.DEFAULT_BUFFER_SIZE

    。在許多系統上,緩沖區的長度通常為4096或8192位元組。
  • “互動式”文本檔案(

    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,即使用檔案開頭作為參考點。
注意:在文本檔案中,隻允許相對于檔案開頭搜尋 2進制檔案
>>> 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)

.npy檔案_python——檔案讀寫

在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()
           

繼續閱讀