os.open
,mmap
、from_buffer()
を使用して大きなバイナリファイル(> 5 GB)を読み込もうとしています。大きなファイルの書き込みと読み込み用に開く
実行中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/help/mcve)? –
詳細情報がなければ、問題を理解することは非常に困難です。しかし、filePath変数には構文エラーがあるようです。そのため、格納する内容を書き込むと非常に便利です。 – Jalo
私の質問をサンプルコード – Pablo