Saltar a contenido

11. Archivos#

(★☆☆, ★★☆, ★★★) Esta notación indica la dificultad de cada ejercicio, de menor a mayor.

Archivos de texto#

  1. ★☆☆ Escriba una función, llamada less, que reciba un archivo de texto e imprima su contenido.

    Importante

    Se debe resolver sin cargar todas las líneas del archivo en memoria.

  2. ★☆☆ Escriba una función, llamada head, que reciba un archivo de texto y un número N e imprima las primeras N líneas.

    Importante

    Se debe resolver sin cargar todas las líneas del archivo en memoria.

  3. ★☆☆ Escriba una función, llamada tail, que reciba un archivo de texto y un número N e imprima las últimas N líneas.

    Importante

    Resolver sin usar la función .readlines().

  4. ★☆☆ Escribir una función, llamada touch, que reciba el nombre de un archivo a guardar, y genere un archivo de texto vacío.

  5. ★☆☆ Escribir una función, llamada cp, que copie todo el contenido de un archivo a otro, de modo que quede exactamente igual.

  6. ★☆☆ Escribir una función, llamada wc, que dado un archivo de texto, lo procese e imprima por pantalla cuántas líneas, cuántas palabras, cuántos caracteres contiene el archivo, y el nombre del archivo.

    Ejemplo:

    > wc('file.txt')
    > 9 21 243 file.txt
    
  7. ★☆☆ Escribir una función, llamada grep, que reciba una cadena y un archivo, e imprima las líneas del archivo que contienen esa cadena.

  8. ★☆☆ Escribir una función, llamada cat, que reciba dos cadenas referidas a los nombres de dos archivos, y guarde en un tercer archivo el contenido de los dos archivos, concatenado.

  9. ★☆☆ Escribir una función, llamada rot13, que reciba un archivo de texto de origen y uno de destino, de modo que para cada línea del archivo origen, se guarde una línea cifrada en el archivo destino. El algoritmo de cifrado a utilizar será muy sencillo: a cada caracter comprendido entre la a y la z (del alfabeto inglés), se le suma 13 y luego se aplica el módulo 26, para obtener un nuevo caracter.

  10. ★☆☆ Escribir una función load_data que reciba un nombre de archivo, cuyo contenido tiene el formato key:value, y devuelva un diccionario con el primer campo como clave y el segundo como diccionario.

    El archivo podría tener el siguiente contenido:

    data.txt
    name: Lionel
    last_name: Messi
    country: Argentina
    team: Inter de Miami
    ...
    
  11. ★☆☆ Escribir una función save_data que reciba un diccionario y un nombre de archivo, y guarde el contenido del diccionario en el archivo, con el formato key:value.

  12. ★☆☆ Escribir una función, llamada sed, que reciba el nombre de un archivo, y dos cadenas. La primera cadena en el archivo es la que queremos reemplazar por la segunda.

  13. ★☆☆ Un archivo CSV (Comma Separated Value) es un archivo de texto que, en cada línea, almacena un registro. Cada registro está compuesto por campos. En el archivo, cada campo está separado por comas (,), de ahí el nombre. El siguiente texto es un ejemplo del contenido de un archivo con el mencionado formato:

    First Name,Last Name,Country,Year of Birth
    Emanuel,Ginobili,Argentina,1977
    Donald,Trump,USA,1946
    Carl,Gauss,Germany,1855
    

    Escribir una función que reciba la información que se quiere escribir en un archivo en formato CSV. Esta información tiene que estar estructurada en una secuencia de secuencias.

    Ejemplo:

    info = [
      ["First Name","Last Name","Country","Year of Birth"],
      ["Emanuel","Ginobili","Argentina","1977"],
      ["Donald","Trump","USA","1946"],
      ["Carl","Gauss","Germany","1855"]
    ]
    
  14. ★☆☆ Un archivo TSV (Tab Separated Value) es un archivo, similar al CSV, que está escrito del siguiente modo:

    First Name\tLast Name\tCountry\Year of Birth
    Lewis\tHamilton\tUnited Kingdom\t1985
    Max\tVerstappen\tBelgium\t1997
    Charles\tLeclerc\tMonaco\t1997
    

    Donde cada espacio es un caracter tabular ('\t'); en ASCII es el código 09 (distinto al caracter espacio).

    Escribir una función que reciba la información que se quiere escribir en un archivo en formato TSV. Esta información tiene que estar estructurada en una secuencia de secuencias.

    Ejemplo:

    info = [
      ["First Name","Last Name","Country","Date of Birth"],
      ["Lewis","Hamilton","United Kingdom","1985"],
      ["Max","Verstappen","Belgium","1997"],
      ["Charles","Leclerc","Monaco","1997"]
    ]
    
  15. ★★☆ Dado dos archivos en formato CSV, dinosaurs1.csv y dinosaurs2.csv, escribir un programa que lea los dos archivos guardados en disco, y luego imprima los nombres de los dinosaurios bípedos, desde el más lento al más rápido.

    dinosaurs1.csv
    NAME,LEG_LENGTH,DIET
    Hadrosaurus,1.4,herbivore
    Struthiomimus,0.72,omnivore
    Velociraptor,1.8,carnivore
    Triceratops,0.47,herbivore
    Euoplocephalus,2.6,herbivore
    Stegosaurus,1.50,herbivore
    Tyrannosaurus Rex,6.5,carnivore
    
    dinosaurs2.csv
    NAME,STRIDE_LENGTH,STANCE
    Euoplocephalus,4.57,quadrupedal
    Stegosaurus,3.2,quadrupedal
    Tyrannosaurus Rex,11.26,bipedal
    Hadrosaurus,2.7,bipedal
    Deinonychus,1.11,bipedal
    Struthiomimus,1.96,bipedal
    Velociraptor,4.42,bipedal
    

    La velocidad se calcula como:

    g = 9.8 # gravity constant
    velocity = ((stride_length / leg_length) - 1) * sqrt(leg_length * g)
    

    Si el dinosaurio no aparece en ambos archivos, no se debe tener en cuenta para el cálculo de la velocidad.

  16. ★★☆ Dado un archivo en formato CSV, que contiene canciones (nombre, duración, artista), escribir un programa que lea el archivo e imprima por pantalla la lista con el siguiente formato.

    Ejemplo:

    +----------------------------+------+-----------------+
    | Name                       | Time | Artist          |
    +----------------------------+------+-----------------+
    | Candy Shop                 | 3:45 | 50 Cent         |
    | In Da Club                 | 3:13 | 50 Cent         |
    | What Up Gangsta            | 2:58 | 50 Cent         |
    | In The Night Of Wilderness | 5:26 | Blackmill       |
    | Wicked                     | 2:53 | Future          |
    | Cudi Montage               | 3:16 | KIDS SEE GHOSTS |
    | Cellular                   | 2:58 | King Krule      |
    | Pull Up                    | 3:35 | Playboi Carti   |
    | The Birthday Party         | 4:45 | The 1975        |
    | One                        | 4:36 | U2              |
    +----------------------------+------+-----------------+
    
    canciones.csv
    Name,Time,Artist
    Candy Shop,3:45,50 Cent
    In Da Club,3:13,50 Cent
    What Up Gangsta,2:58,50 Cent
    In The Night Of Wilderness,5:26,Blackmill
    Wicked,2:53,Future
    Cudi Montage,3:16,KIDS SEE GHOSTS
    Cellular,2:58,King Krule
    Pull Up,3:35,Playboi Carti
    The Birthday Party,4:45,The 1975
    One,4:36,U2
    
  17. ★★☆ Un archivo en formato JSON, es un archivo de texto, pero que su contenido está escrito del siguiente modo:

    {
        "id": 22264,
        "name": "Jack",
        "last_name": "Hunt",
        "age": 38,
        "children": false,
        "siblings": "Jessica Hunt, Robin Hunt",
        "ssn": "1234-99-0012"
    }
    

    Tiene el mismo formato que un diccionario de Python, pero esta escrito en un archivo de texto.

    Escribir una función que lea el archivo en formato JSON, y transforme el contenido a un diccionario de Python. Imprimir el diccionario por pantalla.

  18. ★☆☆ Tenemos un archivo que contiene, en cada línea del mismo, los siguientes datos separados por '\t': continente, país, ciudad, y cantidad de habitantes.

    • Escribir una función que lea el archivo y devuelva los datos cargados en una lista.
    • Escribir un programa que solicite al usuario el nombre de un archivo como el descripto y una cantidad de habitantes y guarde, en un nuevo archivo, los datos de todas las ciudades que tengan más habitantes que los ingresados por el usuario.
  19. ★★☆ Tenemos una colección de libros en un único archivo de texto. Esta colección pertenece al mismo autor, y queremos escribir un programa para conocer las palabras favoritas o, al menos, las más utilizadas por esta persona.

    Para ello:

    • escribir una función que reciba el nombre de un archivo (que ya ha sido parcialmente procesado y sólo contiene oraciones, sin signos de puntuación), lo lea, y devuelva un diccionario con la cantidad de ocurrencias de cada palabra.
    • escribir una función que recibe dicho diccionario y devuelve las 10 palabras con mayor frecuencia (y sus ocurrencias).
    • escribir una función que recibe el nombre de un archivo y el resultado de la función anterior, y guarda cada palabra con su cantidad de ocurrencias en un archivo de texto, un par palabra:ocurrencias por línea.
  20. ★★★ Una casa tiene, entre otras cosas, aberturas, entre las cuales nos interesan: ventanas, puertas y tragaluces. Cada abertura tiene dos estados posibles, abierto o cerrado. A nosotros nos interesa generar algún tipo de resumen que permita conocer el estado general de la casa, es decir, si está completamente cerrada o si hay alguna abertura abierta (en cuyo caso querríamos saber a qué grupo o grupos pertenecen estas aberturas).

    Se pide:

    • Escribir una función resumen_aberturas que, a partir de un diccionario con la información de cada una de las aberturas, nos permita generar un archivo de texto que indique si la casa está completamente cerrada o no. Si la casa no está cerrada, se debe agregar un listado de las aberturas abiertas. Un True asociado a una clave del diccionario implica que la abertura en cuestión está cerrada, mientras que un False implica lo contrario.

    A continuación, algunos ejemplos. Si se tiene un diccionario como el siguiente:

    estado_casa = {'ventanas': True, 'puertas': True, 'tragaluces': True}
    

    Las tres aberturas están cerradas, entonces el archivo de texto que se genera debería tener el siguiente contenido:

    ¡La casa está cerrada!
    

    Por otro lado, si el diccionario fuera:

    estado_casa = {'ventanas': False, 'puertas': True, 'tragaluces': False}
    

    La casa no está completamente cerrada, y el archivo de texto debería refeljar esta situación:

    La casa está abierta.
    Aberturas abiertas:
        *Ventanas
        *Tragaluces
    

    Nota: el nombre del archivo de texto queda a su criterio.