def test_asciiz(self): bf = binfile.BinFile(self.fd) self.fd.seek(1) self.assertEqual(bf.read_asciiz(), "he") self.assertEqual(self.fd.tell(), 4) self.assertEqual(bf.read_asciiz(), "llo world") self.assertEqual(self.fd.tell(), 14)
def test_s8(self): bf = binfile.BinFile(self.fd) self.assertEqual(bf.read_s8(), -126) self.assertEqual(bf.read_s8(), 104) self.assertEqual(bf.read_s8(), 101) self.assertEqual(bf.read_s8(), 0) self.assertEqual(self.fd.tell(), 4)
def test_skip(self): bf = binfile.BinFile(self.fd) self.assertEqual(bf.read_u8(), 130) self.assertEqual(self.fd.tell(), 1) bf.skip(5) self.assertEqual(self.fd.tell(), 6) self.assertEqual(bf.read_u8(), 111)
def test_mixed(self): data = [77, 1234, -5648715644887832, "hello world", -5678] with open(self.filename, mode="wb") as f: bf = binfile.BinFile(f) bf.write_u8(data[0]) bf.write_u16(data[1]) bf.write_s64(data[2]) bf.write_asciiz(data[3]) bf.write_s16(data[4]) with open(self.filename, mode="rb") as f: bf = binfile.BinFile(f) self.assertEqual(bf.read_u8(), data[0]) self.assertEqual(bf.read_u16(), data[1]) self.assertEqual(bf.read_s64(), data[2]) self.assertEqual(bf.read_asciiz(), data[3]) self.assertEqual(bf.read_s16(), data[4])
def __init__(self, input_file): self.binreader_file = None self.file_handler = None # File name of binary file self.binary_file = input_file # File name of header file self.header_file = envi_header.find_hdr_file(input_file) hdr_data_dict = envi_header.read_hdr_file(self.header_file) self.samples = int(hdr_data_dict["samples"]) self.lines = int(hdr_data_dict["lines"]) self.bands = int(hdr_data_dict["bands"]) self.numpy_dtype = \ envi_header.ENVI_TO_NUMPY_DTYPE[hdr_data_dict["data type"]] self.byte_size = numpy.dtype(self.numpy_dtype).itemsize self.line_size = self.samples * self.bands * self.byte_size self.band_size = self.samples * self.lines * self.byte_size self.hdr_data_dict = hdr_data_dict self.current_line = -1 self.current_band = -1 self.interleave_checked = False # Open binary file if HAVE_ARSF_BINARYREADER: try: self.binreader_file = binfile.BinFile(input_file) except Exception as err: # If opening the file fails check header and binary file # sizes match. if not self.check_size(input_file): raise IOError("Could not open file, " "size doesn't match header") # If this isn't the problem raise the exception else: raise else: # Before opening check file size if not self.check_size(input_file): raise IOError("Could not open file, " "size doesn't match header") self.file_handler = open(input_file, "rb")
def test_s32_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertEqual(bf.read_s32(), -2107087616) self.assertEqual(bf.read_s32(), 1819045664) self.assertEqual(self.fd.tell(), 8)
def test_s32_le(self): bf = binfile.BinFile(self.fd, little=True) self.assertEqual(bf.read_s32(), 6645890) self.assertEqual(bf.read_s32(), 544173164) self.assertEqual(self.fd.tell(), 8)
def test_u32_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertEqual(bf.read_u32(), 2187879680) self.assertEqual(bf.read_u32(), 1819045664) self.assertEqual(self.fd.tell(), 8)
def test_s16_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertEqual(bf.read_s16(), -32152) self.assertEqual(bf.read_s16(), 25856) self.assertEqual(self.fd.tell(), 4)
def test_s16_le(self): bf = binfile.BinFile(self.fd, little=True) self.assertEqual(bf.read_s16(), 26754) self.assertEqual(bf.read_s16(), 101) self.assertEqual(self.fd.tell(), 4)
def test_float_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertAlmostEqual(bf.read_float(), -1.7073653665398035e-37) self.assertEqual(self.fd.tell(), 4)
def test_float_le(self): bf = binfile.BinFile(self.fd, little=True) self.assertAlmostEqual(bf.read_float(), 9.312875451071659e-39) self.assertEqual(self.fd.tell(), 4)
def test_u64_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertEqual(bf.read_u64(), 9396871675001990944) self.assertEqual(self.fd.tell(), 8)
def test_double_le(self): bf = binfile.BinFile(self.fd, little=True) self.assertAlmostEqual(bf.read_double(), 1.874938730448489e-152) self.assertEqual(self.fd.tell(), 8)
def test_ascii_with_null(self): bf = binfile.BinFile(self.fd) self.fd.seek(1) self.assertEqual(bf.read_ascii(8), "he\0llo w") self.assertEqual(self.fd.tell(), 9)
def test_ascii(self): bf = binfile.BinFile(self.fd) self.fd.seek(4) self.assertEqual(bf.read_ascii(5), "llo w") self.assertEqual(self.fd.tell(), 9)
def test_double_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertAlmostEqual(bf.read_double(), -4.662586273244399e-297) self.assertEqual(self.fd.tell(), 8)
def test_s64_le(self): bf = binfile.BinFile(self.fd, little=True) self.assertEqual(bf.read_s64(), 2337205942747490434) self.assertEqual(self.fd.tell(), 8)
def test_exception(self): try: binfile.BinFile(None) self.assertTrue(False) except TypeError: self.assertTrue(True)
import binfile csm = binfile.BinFile("CSM.BIN") print(csm.num_files) print(csm.directory[0].name)
def test_s64_be(self): bf = binfile.BinFile(self.fd, little=False) self.assertEqual(bf.read_s64(), -9049872398707560672) self.assertEqual(self.fd.tell(), 8)