11. Archivos#
(★☆☆, ★★☆, ★★★) Esta notación indica la dificultad de cada ejercicio, de menor a mayor.
Archivos de texto#
-
★☆☆ 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.
-
★☆☆ Escriba una función, llamada
head
, que reciba un archivo de texto y un númeroN
e imprima las primerasN
líneas.Importante
Se debe resolver sin cargar todas las líneas del archivo en memoria.
-
★☆☆ Escriba una función, llamada
tail
, que reciba un archivo de texto y un númeroN
e imprima las últimasN
líneas.Importante
Resolver sin usar la función
.readlines()
. -
★☆☆ Escribir una función, llamada
touch,
que reciba el nombre de un archivo a guardar, y genere un archivo de texto vacío. -
★☆☆ Escribir una función, llamada
cp
, que copie todo el contenido de un archivo a otro, de modo que quede exactamente igual. -
★☆☆ 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:
-
★☆☆ Escribir una función, llamada
grep
, que reciba una cadena y un archivo, e imprima las líneas del archivo que contienen esa cadena. -
★☆☆ 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. -
★☆☆ 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. -
★☆☆ Escribir una función
load_data
que reciba un nombre de archivo, cuyo contenido tiene el formatokey:value
, y devuelva un diccionario con el primer campo como clave y el segundo como diccionario.El archivo podría tener el siguiente contenido:
-
★☆☆ 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 formatokey:value
. -
★☆☆ 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. -
★☆☆ 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:
-
★☆☆ 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:
-
★★☆ Dado dos archivos en formato CSV,
dinosaurs1.csv
ydinosaurs2.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.csvNAME,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.csvNAME,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:
Si el dinosaurio no aparece en ambos archivos, no se debe tener en cuenta para el cálculo de la velocidad.
-
★★☆ 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 | +----------------------------+------+-----------------+
-
★★☆ 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.
-
★☆☆ 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.
-
★★☆ 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.
-
★★★ 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. UnTrue
asociado a una clave del diccionario implica que la abertura en cuestión está cerrada, mientras que unFalse
implica lo contrario.
A continuación, algunos ejemplos. Si se tiene un diccionario como el siguiente:
Las tres aberturas están cerradas, entonces el archivo de texto que se genera debería tener el siguiente contenido:
Por otro lado, si el diccionario fuera:
La casa no está completamente cerrada, y el archivo de texto debería refeljar esta situación:
Nota: el nombre del archivo de texto queda a su criterio.
- Escribir una función