def iterable_de_csv(file: str, delimiter: str = ",", encoding='utf-8') -> Iterable[list[str]]: checkArgument(existe_fichero(file), 'El fichero {} no existe'.format(file)) with open(file, encoding=encoding) as f: lector = csv.reader(f, delimiter=delimiter) for line in lector: yield line
def mcd(a: int, b: int) -> int: checkArgument( a >= 0 and b > 0, 'El coeficiente a debe ser \ mayor o igual que cero y b mayor que cero \ y son: a = {0}, b = {1}'.format(a, b)) while b > 0: a, b = b, a % b return a
def parse(linea: list[str]) -> Estacion: name, slots, empty_slots, free_bikes, longitude, latitude = linea checkArgument('_' in name, '{0} no contiene _'.format(name)) numero, name = name.split("_") numero = int(numero) slots = int(slots) empty_slots = int(empty_slots) free_bikes = int(free_bikes) ubicacion = Coordenadas2D(float(longitude), float(latitude)) return Estacion.of(numero, name, slots, empty_slots, free_bikes, ubicacion)
def data_of_file(fichero: str) -> Red: estaciones = [ Estacion.parse(x) for x in lineas_de_csv( fichero, delimiter=",", encoding='cp1252')[1:] ] checkArgument( len(estaciones) == len({e.numero for e in estaciones}), 'Hay numeros de estacion repetidos') pnc = {e.nombre_compuesto: e for e in estaciones} pn = {e.numero: e for e in estaciones} estaciones.sort() return Red.of(estaciones, pnc, pn)
def __add__(self, estacion: Estacion) -> None: checkArgument( estacion.numero not in self.por_numero, 'El numero {} de la estacion esta repetido'.format( estacion.numero)) checkArgument( estacion.nombre_compuesto not in self.por_nombre_compuesto, 'El nombre compuesto {} de la estacion esta repetido'.format( estacion.nombre_compuesto)) self._estaciones.append(estacion) pnc = {e.nombre_compuesto: e for e in self._estaciones} pn = {e.numero: e for e in self._estaciones} self._estaciones.sort() self._por_nombre_compuesto = pnc self._por_numero = pn
def of(numero: int, name: str, slots: int, empty_slots: int, free_bikes: int, ubicacion: Coordenadas2D) -> Estacion: checkArgument( slots >= 0, "Slots deben ser mayor o igual que cero y es {0:d}".format(slots)) checkArgument( empty_slots >= 0, "Empty_Slots deben ser mayor o igual que cero y es {0:d}".format( empty_slots)) checkArgument( free_bikes >= 0, "Free_Bikes deben ser mayor o igual que cero y es {0:d}".format( free_bikes)) return Estacion(numero, name, slots, empty_slots, free_bikes, ubicacion)
def of(latitud:float,longitud:float,altitud:float) -> Coordenadas3D: checkArgument(-90<=latitud and latitud<=90, f'latitud {latitud} no es correcta') checkArgument(-180<=longitud and longitud<=180, f'logitud {longitud} no es correcta') return Coordenadas3D(latitud,longitud,altitud)
def velocidad(self) -> float: checkArgument( self.tiempo > 0, 'El tiempo debe ser mayor que cero y es {0}'.format(self.tiempo)) return self.longitud / self.tiempo
def of(principio: Marca, fin: Marca) -> Intervalo: checkArgument(principio <= fin,\ 'Principio={0}, fin={1}'.format(principio,fin)) return Intervalo(principio, fin)
def __init__(self, n:int, d:int=1): checkArgument(d != 0,'El denominador no puede ser cero') self._numerador = n self._denominador = d self.__normaliza()
def encoding(file: str) -> str: checkArgument(existe_fichero(file), 'El fichero {} no existe'.format(file)) with open(file, "rb") as f: data = f.read() enc = chardet.detect(data) return enc['encoding']
def read(file: str, encoding: str = 'utf-8') -> str: checkArgument(existe_fichero(file), 'El fichero {} no existe'.format(file)) with open(file, "r", encoding=encoding) as f: texto = f.read() return texto
def lineas_de_fichero(file: str, encoding='utf-8') -> list[str]: checkArgument(existe_fichero(file), 'El fichero {} no existe'.format(file)) with open(file, encoding=encoding) as f: lineas_de_fichero = [linea.rstrip('\n') for linea in f] return lineas_de_fichero
def lineas_iterable(file: str, encoding: str = 'utf-8') -> Iterable[str]: checkArgument(existe_fichero(file), 'El fichero {} no existe'.format(file)) with open(file, "r", encoding=encoding) as f: for line in f: yield line.strip()