《Python Cookbook 3rd》笔记(5.8):固定大小记录的文件迭代
生活随笔
收集整理的這篇文章主要介紹了
《Python Cookbook 3rd》笔记(5.8):固定大小记录的文件迭代
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
固定大小記錄的文件迭代
問題
你想在一個固定長度記錄或者數據塊的集合上迭代,而不是在一個文件中一行一行的迭代。
解法
通過下面這個小技巧使用 iter 和 functools.partial() 函數:
from functools import partialRECORD_SIZE = 32with open('somefile.data', 'rb') as f:records = iter(partial(f.read, RECORD_SIZE), b'')for r in records:...這個例子中的 records 對象是一個可迭代對象,它會不斷的產生固定大小的數據塊,直到文件末尾。要注意的是如果總記錄大小不是塊大小的整數倍的話,最后一個返回元素的字節數會比期望值少。
討論
iter() 函數有一個鮮為人知的特性就是,如果你給它傳遞一個可調用對象和一個標記值,它會創建一個迭代器。這個迭代器會一直調用傳入的可調用對象直到它返回標記值為止,這時候迭代終止。
在例子中, functools.partial 用來創建一個每次被調用時從文件中讀取固定數目字節的可調用對象。標記值 b’’ 就是當到達文件結尾時的返回值。
最后再提一點,上面的例子中的文件時以二進制模式打開的。如果是讀取固定大小的記錄,這通常是最普遍的情況。而對于文本文件,一行一行的讀取 (默認的迭代行為) 更普遍點。
總結
以上是生活随笔為你收集整理的《Python Cookbook 3rd》笔记(5.8):固定大小记录的文件迭代的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python Cookbook 3rd
- 下一篇: 用Python去除扫描型PDF中的水印