Привет всем, сегодня мы обсудим, как вы будете обрабатывать свои данные, если они огромны, а у вас недостаточно памяти. Чтобы лучше понять это, давайте возьмем пример, где вам нужно отредактировать некоторые компоненты текстового файла, размер которого составляет ~ 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)