Advertisement
Fhernd

lectura-estructura-datos-anidadas.py

Aug 4th, 2018
6,744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.61 KB | None | 0 0
  1. import struct
  2. import itertools
  3.  
  4. def escribir_polilineas(archivo, polilineas):
  5.     lista_plana = list(itertools.chain(*polilineas))
  6.  
  7.     min_x = min(x for x, y in lista_plana)
  8.     max_x = max(x for x, y in lista_plana)
  9.     min_y = min(y for x, y in lista_plana)
  10.     max_y = max(y for x, y in lista_plana)
  11.  
  12.     with open(archivo, 'wb') as f:
  13.         f.write(struct.pack('<iddddi',
  14.                             0x1234,
  15.                             min_x, min_y,
  16.                             max_x, max_y,
  17.                             len(polilineas)))
  18.  
  19.         for polilinea in polilineas:
  20.             tamahnio = len(polilinea) * struct.calcsize('<dd')
  21.             f.write(struct.pack('<i', tamahnio + 4))
  22.  
  23.             for punto in polilinea:
  24.                 f.write(struct.pack('<dd', *punto))
  25.  
  26. def leer_polilineas(archivo):
  27.     with open(archivo, 'rb') as f:
  28.         encabezado = f.read(40)
  29.         codigo, min_x, min_y, max_x, max_y, numero_polilineas = struct.unpack('<iddddi', encabezado)
  30.  
  31.         polilineas = []
  32.  
  33.         for n in range(numero_polilineas):
  34.             bytes_punto, = struct.unpack('<i', f.read(4))
  35.             polilinea = []
  36.  
  37.             for m in range(bytes_punto // 16):
  38.                 punto = struct.unpack('<dd', f.read(16))
  39.                 polilinea.append(punto)
  40.  
  41.             polilineas.append(polilinea)
  42.  
  43.     return polilineas
  44.  
  45. polilineas = [
  46.     [(1.0, 2.5), (3.5, 4.0), (2.5, 1.5)],
  47.     [(7.0, 1.2), (5.1, 3.0), (0.5, 7.5), (0.8, 9.0)],
  48.     [(3.4, 6.3), (1.2, 0.5), (4.6, 9.2)]
  49. ]
  50.  
  51. escribir_polilineas('polilineas.bin', polilineas)
  52.  
  53. print(leer_polilineas('polilineas.bin'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement