Python mmap的使用-檔案記憶體對映
mmap是一種虛擬記憶體對映檔案的方法,即將一個檔案或者其它物件對映到程式的地址空間,實現檔案磁碟地址和程式虛擬地址空間中一段虛擬地址的一一對映關係。
優點:
- 普通檔案被對映到虛擬地址空間後,程式可以向訪問普通記憶體一樣對檔案進行訪問,在有些情況下可以提高IO效率
- 它佔用實體記憶體空間少,可以解決記憶體空間不足的問題,適合處理超大檔案
mmap在Windows和Linux平臺上的行為有所不同。例如,Windows不支援建立空對映。
Python通過mmap模組支援檔案記憶體對映,文件:https://docs.python.org/3.5/library/mmap.html。
讀操作
import mmap
f = open('test.txt', 'r') # r->讀
""" mmap用來建立記憶體對映檔案
第一個引數是檔案描述符
第二個引數是對映長度,0代表整個檔案
第三個引數是訪問模式,ACCESS_READ:讀;ACCESS_WRITE:寫:
ACCESS_COPY:寫時複製,不會把更改寫入到檔案,使用flush把更改寫到檔案
"""
with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as m:
print('讀取前10個位元組 :', m.read(10))
print('還可以像操作字串一樣操作:', m[:10])
print('下一個10位元組 :', m.read(10))
# mm.close()
f.close()
寫操作
import mmap
word = b'World'
reversed = word[::-1]
print('查詢:', word)
print('替換:', reversed)
with open('test.txt', 'r+') as f: # r+,不是w
with mmap.mmap(f.fileno(), 0) as m:
m.seek(0) # 定位到檔案頭
loc = m.find(word)
m[loc:loc + len(word)] = reversed
m.flush()
記憶體對映檔案可以像字串一樣操作,我們可以在其上應用正規表示式。
相關文章
- 使用記憶體對映檔案(mmap)記憶體
- 從記憶體對映mmap說開去記憶體
- 二進位制檔案記憶體對映記憶體
- windows核心程式設計--記憶體對映檔案Windows程式設計記憶體
- 居然這就是C++記憶體對映檔案?!C++記憶體
- 從核心世界透視 mmap 記憶體對映的本質(原理篇)記憶體
- Android入門教程 | mmap 檔案對映介紹Android
- C#記憶體對映大檔案並使用Marshal解析結構體資訊C#記憶體結構體
- 從核心世界透視 mmap 記憶體對映的本質(原始碼實現篇)記憶體原始碼
- Java記憶體對映,上G大檔案輕鬆處理Java記憶體
- 溫故之.NET程式間通訊——記憶體對映檔案記憶體
- linux記憶體管理(八)- 反向對映RMAPLinux記憶體
- JavaScript對記憶體的使用JavaScript記憶體
- mmap共享儲存對映(儲存I/O對映)系列詳解
- linux mmap應用與驅動共享記憶體Linux記憶體
- Linux系統程式設計—共享記憶體之mmapLinux程式設計記憶體
- linux檔案存在記憶體裡Linux記憶體
- 載入Mapper對映檔案APP
- Mybatis對映檔案簡介MyBatis
- 共享記憶體對映(linux程式與執行緒學習筆記)記憶體Linux執行緒筆記
- Python讀取大檔案的"坑“與記憶體佔用檢測Python記憶體
- Ubuntu 新增虛擬記憶體檔案Ubuntu記憶體
- dump檔案解析之探索.Net的記憶體記憶體
- 記憶體檔案系統的再學習記憶體
- python的記憶體管理Python記憶體
- 作業系統-記憶體、檔案管理作業系統記憶體
- Ubuntu下修改hosts檔案中的域名對映Ubuntu
- nginx容器卷對映檔案不生效Nginx
- Hibernate中實體類對映檔案表與表的關係模版
- Python深入 Python的記憶體管理Python記憶體
- 記憶體對齊記憶體
- 計算機程式的思維邏輯 (61) – 記憶體對映檔案及其應用 – 實現一個簡單的訊息佇列計算機記憶體佇列
- Mybatis 學習筆記(一)——配置檔案SqlMapConfig.xml和對映檔案Mapper.xmlMyBatis筆記SQLXMLAPP
- python對檔案的操作Python
- 打包檔案以及啟動java程式對Linux記憶體擠壓情況的研究JavaLinux記憶體
- 一種基於記憶體的檔案系統tmpfs記憶體
- 【Redis】 redis解析rdb檔案,記憶體排序等Redis記憶體排序
- Python分享之Python的記憶體管理Python記憶體