Я пытаюсь прочитать большой двоичный файл (> 5 ГБ) с использованием os.open
, mmap
и from_buffer()
.Открыть для записи и чтения большого файла Python
Запуск fd = os.open(filePath, O_RDWR)
Ошибка OSError: [Errno 22] Invalid argument: H:\\xyz.wdp
поднят. Я понял, что проблема в том, что файл был слишком большим, поскольку с использованием похожих, но меньших файлов, O_WRONLY
или O_RDONLY
, он работал. К сожалению, если я использую O_WRONLY
или O_RDONLY
, доступ запрещен для from_buffer()
функции (TypeError: mmap can't modify a readonly memory map.
).
Мой пример кода:
class StructData(Structure):
_pack_ = 1
_fields_ = [('bin', c_ubyte)]
fd = os.open(filePath, os.O_RDWR)
mmap_file = mmap.mmap(fd, length=80, access=mmap.ACCESS_WRITE, offset=0)
d_array = StructData*80
data = d_array.from_buffer(mmap_file)
Не могли бы вы помочь мне решить эту проблему? Я хочу добавить, что я работаю с большими файлами, и мне нужно, чтобы он работал очень быстро, я бы хотел избежать использования struct.unpack
и так далее.
Спасибо!
Как насчет [MCVE] (HTTP: // StackOverflow .com/помощь/mcve)? –
Без дополнительной информации, очень сложно разобраться в вашей проблеме. Однако, похоже, что переменная filePath имеет синтаксическую ошибку, поэтому, если вы пишете то, что вы храните в ней, это было бы очень полезно. – Jalo
Я обновил свой вопрос с примера кода – Pablo