Ejercicio 9.4 (2)

Escribir una funcion que dada una ruta asociada a un archivo devuelva un diccionario que tiene la linea mas larga en la que aparece cada palabra


In [ ]:
def obtener_lineas_mas_largas(ruta):
    """
    Recibe una ruta asociada a un archivo
    Devuelve un diccionario que contiene
    como claves las palabras del archivo y como
    valores la linea mas larga en la que aparece
    """
    lineas_mas_largas = {}
    with open(ruta) as archivo:
        for linea in archivo:
            for palabra in linea.split():
                if len(lineas_mas_largas.get(palabra, "")) < len(linea):
                    lineas_mas_largas[palabra] = linea
    return lineas_mas_largas

Ejercicio 9.4 (3)

Escribir una funcion que, dada una lista de rutas de archivos, escriba en un archivo la informacion de la línea más larga de cualquier archivo por palabra, junto con el nombre del archivo al que pertenece. Cada linea tiene que tener el formato Palabra:Linea:Ruta


In [1]:
def lineas_mas_largas_en_archivos(rutas_archivos):
    """
    Recibe una lista de rutas de archivos
    Devuelve un diccionario con palabras como claves
    y como valores una tupla con la linea mas larga 
    y el archivo al que pertenece esa linea
    """
    palabras_archivos = {}
    for ruta in rutas_archivos:
        lineas_mas_largas = obtener_lineas_mas_largas(ruta)
        for palabra,linea in lineas_mas_largas.items():
            if len(linea) > len(lineas_mas_largas.get(palabra,("","")[0])):
                palabras_archivos[palabra] = (linea, ruta)
    with open("salida", "w") as archivo_salida:
        for pal, linea_ruta in palabras_archivos.items():
            linea = "{}:{}:{}\n".format(pal, linea_ruta[0], linea_ruta[1])
            archivo_salida.write(linea)


  File "<ipython-input-1-0e1c7c89a079>", line 14
    with open("salida", )
                         ^
SyntaxError: invalid syntax
  1. Pensar qué implicaria abrir el archivo usando "a" en lugar de "w"
  2. Cómo harian para escribir, por cada libro, todas las líneas más largas por palabra?