Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python(mmap)でのメモリマップトファイルのサポート?


ファイルオブジェクトをPythonプログラムに読み込んで変更する場合は、2つの方法で実行できます。最初の方法は、ファイルが配置されている物理ストレージドライブのコンテンツを変更することであり、2番目の方法は、システムのメモリまたはRAMで直接コンテンツを変更することです。この記事では、Pythonで利用可能なmmapモジュールを使用して、ファイルオブジェクトのコンテンツを読み取り、検索し、変更する方法を説明します。ファイルを操作するためにopen、read、lseekなどのシステムコールを行う代わりに、メモリマッピングはファイルのデータをメモリに入れ、メモリ内のファイルを直接操作できるようにします。

メモリマップトファイルの読み取り

以下の例では、完全なファイルを一度にメモリに読み込み、ファイルオブジェクトとしてメモリに保持します。次に、読み取りモードでアクセスします。最後に、ご覧のとおり、ファイル全体がオブジェクトを表しており、そこから特定の位置をスライスして必要なテキストを取得します。

import mmap

def read_mmap(fname):
   with open(fname, mode="r", encoding="utf8") as fobj:
      with mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_READ) as mmap_obj:
         print(mmap_obj[4:26])

read_mmap('E:\\test.txt')

出力

上記のコードを実行すると、次の結果が得られます-

'emissions from gaseous'

mmapを使用して検索

import mmap
import time

def regular_io_find(fname):
   with open(fname, mode="r", encoding="utf-8") as fobj:
      text = fobj.read()
      text.find("Death ")

def mmap_io_find(fname):
   with open(fname, mode="r", encoding="utf-8") as fobj:
      with mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_READ) as mmap_obj:
         mmap_obj.find(b"Death ")

start_time_r = time.time()
regular_io_find('E:\\emissions.txt')
end_time_r = time.time()
print("Regualr read start time :",start_time_r)
print("Regualr read start time :",end_time_r)
print('Regular read time : {0}'.format(end_time_r - start_time_r))

start_time_m = time.time()
mmap_io_find('E:\\emissions.txt')
end_time_m = time.time()
print("mmap read start time :",start_time_m)
print("mmap read start time :",end_time_m)
print('mmap read time : {0}'.format(end_time_m - start_time_m))
>

出力

上記のコードを実行すると、次の結果が得られます-

2013
Regualr read start time : 1609812463.2718163
Regualr read end time : 1609812463.2783241
Regular read time to find: 0.00650787353515625
mmap read start time : 1609812463.2783241
mmap read start time : 1609812463.2783241
mmap read time to find : 0.0

ファイルへの書き込み

以下の例では、ファイルを取得し、ファイルの読み取りと書き込みの両方を可能にするr+としてアクセスコードを使用してmmapモジュールで開きます。ファイルオブジェクトを作成した後、文字列を書き込むことができる場所をスライスして位置を選択します。

import mmap

def mmap_io_write(fname):
   with open(fname, mode="r+") as fobj:
      with mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_WRITE) as mmap_obj:
         mmap_obj[20:26] = b"Hello!"
         mmap_obj.flush()

mmap_io_write('E:\\emissions.txt')

上記のコードを実行すると、ファイルを開いて文字列Hello!を確認できます。 20から26までのバイト位置でファイルに書き込まれます。


  1. Pythonのファイルオブジェクト?

    Pythonでは、ファイルの読み取りまたは書き込みを試みるたびに、ライブラリがネイティブに処理されるため、ライブラリをインポートする必要はありません。 最初に行うことは、組み込みのopen関数を使用してファイルオブジェクトを取得することです。 open関数はファイルを開き、ファイルオブジェクトを返します。ファイルオブジェクトには、情報を取得したり、開いたファイルを操作したりするために使用できるメソッドと属性が含まれています。 ファイルとは何ですか? ファイルに対して操作を行う前に、まずファイルとは何かを理解しましょう。ファイルは、関連情報を保存するためのディスク上の名前付きの場所です。フ

  2. Pythonopenpyxlモジュールを使用してExcelファイルの読み取りと書き込み

    Pythonは、Excelファイルを操作するためのopenpyxlモジュールを提供します。 このモジュールでは、Excelファイルの作成方法、書き込み方法、読み取り方法などを実装できます。 openpyxlモジュールをインストールするには、コマンドプロンプトでこのコマンドを記述できます pip install openpyxl シートにタイトル名を付けたい場合 サンプルコード import openpyxl my_wb = openpyxl.Workbook() my_sheet = my_wb.active my_sheet_title = my_sheet.title print