Python mmap的使用-檔案記憶體對映

周小董發表於2019-01-30

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

image.png

寫操作

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

image.png

記憶體對映檔案可以像字串一樣操作,我們可以在其上應用正規表示式。

來源:http://blog.topspeedsnail.com/archives/10036#more-10036

相關文章