Привет всем, сегодня мы обсудим, как вы будете обрабатывать свои данные, если они огромны, а у вас недостаточно памяти. Чтобы лучше понять это, давайте возьмем пример, где вам нужно отредактировать некоторые компоненты текстового файла, размер которого составляет ~ 40 ГБ.

Теперь, чтобы отредактировать такой файл, у вас есть два варианта

  • Получите оперативную память эквивалентного размера
  • Использовать отображение памяти

Поскольку первый метод довольно прост, давайте обсудим, что такое отображение памяти и как мы можем реализовать его в Python.

Что такое сопоставление памяти?

Всякий раз, когда нам приходится иметь дело с переменной, для которой у нас недостаточно оперативной памяти, мы отображаем ее на наш жесткий диск и получаем к ней виртуальный доступ. Это помогает нам не загружать всю переменную в нашу оперативную память, однако работает просто отлично. Чтобы кодировать, вам может потребоваться выполнить следующий скрипт для создания огромного текстового файла.

file_path = "./large_file.txt"
file_size = 17 * 1024 * 1024 * 1024 # size of the file we want to generate 

chunk_size = 1024 * 1024 # processing size 

buffer = "Vivek has done something "*chunk_size # input text content 

with open(file_path, "w") as f:
  while file_size > 0:
    f.write(buffer)
    file_size -= chunk_size
    
    if file_size < chunk_size:
      buffer = "Vivek has completed the computation"*file_size
    else:
      buffer = "Vivek still needs to finish"*chunk_size 

Приведенный выше код создаст на вашем компьютере огромный текстовый файл, который мы можем использовать для обработки. Теперь для доступа к тому же файлу мы используем код ниже

import mmap

with open("./large_file.txt") as f:
  with mmap.mmap(f.fileno(), 0, access = mmap.ACCESS_READ) as m:
    chunk_size = 1024 * 1024 
    buffer = ""
    
    while True:
      data = m.read(chunk_size)
      if not data:
        break 
      buffer += data.decode("utf-8")
      lines = buffer.split("\n")

      for line in lines:
        print(line)

      buffer = lines[-1]

Выполнение вышеуказанного скрипта даст вам следующий вывод

Таким образом, с помощью этого метода мы можем получить доступ к такому огромному текстовому файлу без увеличения наших вычислительных требований.

Если вам понравился этот блог, хлопните в ладоши :) и следите за мной в моей социальной сети (Linkedin)