From e9dd268a2f41fdf7f456e3d0e7fbd66383f65209 Mon Sep 17 00:00:00 2001 From: jmcvey3 <53623232+jmcvey3@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:02:06 -0800 Subject: [PATCH] Rename 'open' function and avoid failing to EOF scan very large files --- mhkit/dolfyn/io/nortek2.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mhkit/dolfyn/io/nortek2.py b/mhkit/dolfyn/io/nortek2.py index fa0992c3..ea56d40c 100644 --- a/mhkit/dolfyn/io/nortek2.py +++ b/mhkit/dolfyn/io/nortek2.py @@ -14,6 +14,9 @@ from ..time import epoch2dt64, _fill_time_gaps +int32_max = np.iinfo(np.int32).max + + def read_signature( filename, userdata=True, @@ -163,7 +166,7 @@ def __init__( debug=debug, dp=dual_profile, ) - self._reopen(bufsize) + self._open(bufsize) self.filehead_config = self._read_filehead_config_string() self._ens_pos = self._index["pos"][ lib._boolarray_firstensemble_ping(self._index) @@ -183,7 +186,7 @@ def _calc_lastblock_iswhole( return (self._eof - self._ens_pos[-1]) == standard_blocksize def _check_nortek(self, endian): - self._reopen(10) + self._open(10) byts = self.f.read(2) if endian is None: if unpack("<" + "BB", byts) == (165, 10): @@ -205,8 +208,12 @@ def find_all(s, c): yield idx idx = s.find(c, idx + 1) - # Open the entire file - self._reopen(self._eof) + # Open the entire file to find start header + if self._eof >= int32_max: + init_buffer = int32_max + else: + init_buffer = self._eof + self._open(init_buffer) pk = self.f.peek(1) # Search for multiple saved headers found = [i for i in find_all(pk, b"GETCLOCKSTR")] @@ -216,7 +223,7 @@ def find_all(s, c): start_idx = found[-1] - 11 return start_idx - def _reopen(self, bufsize=None): + def _open(self, bufsize=None): if bufsize is None: bufsize = 1000000 try: