實驗室導師又有任務,從一個.dat文件中讀取波形數據,通過一個自編碼網絡進行異常檢測。可是對我這種小白來說真的艱難。從最基礎的文件讀寫開始吧。
先說數據,是一個int16型的數組。說是數組,但是讀取也並不簡單。眾所周知,數據在計算機中是用二進制的形式儲存的。int16型有符號整數。16位,16bit,也就是兩個字節。那么自然而然的想到,讀取兩個字節(bytes)的數據(也就是16bit),然后把它轉化成int16的整型(即十進制整型)。數據就變得可以處理了。
先放一個不同位數的整型數據范圍吧,經常會用的到。
Int8 //等於byte,-128 127
Int16 //等於short, 占2個字節. -32768 32767
Int32 //等於int, 占4個字節. -2147483648 2147483647
Int64 //等於long, 占8個字節. -9223372036854775808 9223372036854775807
這里補充一個小知識點,python3中的int類型是動態長度的,是長整型,理論支持無限大的數字。對一個int型實例運行內建的__sizeof__方法,可以查看占用的字節數。其中0占了24個字節,其他數字一般占用28個字節。
讀文件:文本文件
>>> f = open('/Users/michael/test.txt', 'r')
我們知道,在python3中,字符串類型(str)包含的是Unicode characters。這種特性使得我們在python3中可以定義包含Unicode character的字符串,並甚至可以在變量標識符中使用非ASCII字符。
那么以上的代碼做的是這樣一件事:定義一個文件對象,文件對象標明將用讀字符的手段來讀取這個文件中的內容。
>>> f.read() 'Hello, world!'
上面的代碼一次性讀取文件的全部內容,把內容讀到內存,用str對象表示。
此外還可以調用read(size),每次讀取size個字節的內容。或者調用readline(),每次讀取一行內容。將每一行的內容存在str里,並返回一個str的列表。
為了保證文件被關閉,可以使用with關鍵詞:
with open('/path/to/file', 'r') as f: print(f.read())
讀取非UTF-8編碼的文本文件,需要給open()函數傳入encoding參數,例如,讀取GBK編碼的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk') >>> f.read() '測試'
二進制文件:
如果要讀取二進制文件,用rb模式打開文件即可。
>>> f = open('/Users/michael/test.jpg', 'rb') >>> f.read() b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六進制表示的字節
寫文件:
寫文件和讀文件是一樣的,調用open()函數時,傳入'w'或者'wb'表示寫文本文件或者寫二進制文件。