Salta el contingut
 

Exercicis: Operacions amb fitxers

Joan Puigcerver Ibáñez

j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

En aquests exercicis treballarem:

  • Lectura i escriptura a fitxers.
  • Operacions de manipulació del sistema de fitxers.

Els exercicis marcats amb ✅ seran corregits a classe.

Estructura del projecte

Tots els exercicis han de complir amb la següent estructura:

  • Cada exercici ha d'anar dins del directori corresponent.
  • El nom del fitxer ha de coincidir amb el títol de l'exercici.
  • El format de l'eixida del programa ha de ser consistent amb el format demanat.
  • La lògica d'aplicació ha d'estar organitzada en classes i mètodes; és recomanable afegir docstrings.

Exercicis

ud5/files

stats.py

Crea un programa que accepte rutes de fitxers com a arguments posicionals i indique si existeixen i de quin tipus són.

Exemple d'ús
$ python stats.py inexistent.txt /etc/passwd /home
inexistent.txt: No exists
/etc/passwd: File
/home: Directory

cat.py

Crea un programa semblant a l'ordre cat de Linux, que mostrarà el contingut dels fitxers passats com a arguments.

  • Si solament es passa un fitxer, es mostrarà el seu contingut.
  • Si es passen diversos fitxers, s'afegirà una línia abans de cada indicant la ruta del fitxer.
  • Si un fitxer no existeix, es mostrarà un missatge d'error.
Exemple d'ús
$ python cat.py file1.txt file2.txt inexistent.txt
===== file1.txt =====
Contingut del fitxer 1.

===== file2.txt =====
Contingut del fitxer 2.

Error: 'inexistent.txt' no such file.

users.py

Crea un programa que processe el fitxer /etc/passwd i /etc/group i mostre per cada usuari del sistema la següent informació:

  • Nom d'usuari
  • UID
  • Grup primari (nom i GID)
  • Grups secundaris (noms i GID)

En sistemes Windows podeu utilitzar els fitxers del WSL

f = open("\\\\wsl.localhost\\Ubuntu\\etc\\passwd", "r")
Exemple d'eixida
$ python users.py
Username: root
UID: 0
Primary Group: root (GID: 0)
Secondary Groups: adm (GID: 4), sudo (GID: 27)

Username: user1
UID: 1000
Primary Group: user1 (GID: 1000)
Secondary Groups: cdrom (GID: 24), dip (GID: 30), plugdev (GID: 46)
Ampliació: Exportació a JSON

Modifica el programa perquè accepte un argument opcional -o/--output que indique un fitxer on exportar la informació en format JSON.

tree.py

Crea un programa semblant a l'ordre tree de Linux, que mostrarà els continguts del directori especificat com un arbre.

Utilitza els caràcters , i per representar l'arbre.

El programa rebrà els següents arguments:

  • Ha d'acceptar un argument posicional path, amb la ruta del directori a recórrer.
  • Ha d'acceptar un argument opcional -a/--all que també mostrarà els fitxers ocults (comencen per un punt '.').
Exemple d'ús
$ mkdir -p dir/a &&mkdir -p dir/b && touch dir/a/f1.txt && touch dir/a/f2.txt && touch dir/b/f3.txt && touch dir/b/.f4.txt
$ python tree.py dir
dir
├── a
   ├── f1.txt
   └── f2.txt
└── b
    └── f3.txt
$ python tree.py -a dir
dir
├── a
   ├── f1.txt
   └── f2.txt
└── b
    ├── .f4.txt
    └── f3.txt

netplan-config.py

Aquest exercici s'ha d'executar en una màquina virtual

Crea un programa que facilite la configuració d'una interfície de xarxa utilitzant netplan.

La sinatxi de l'ordre és la següent:

netplan-config.py INTERFACE [--static] [--dynamic] [--restore RESTORE_FILE] [-f|--force]

  • INTERFACE: Nom de la interfície de xarxa.
  • --static: Iniciarà un procés on el programa li demanrà els diferents paràmetres per configurar l'adaptador amb IP estàtica.
  • --dynamic: Configurarà l'adaptador en una IP dinàmica.
  • -f|--force: No demanarà confirmació a l'usuari.
  • --restore RESTORE_FILE. Restaurarà la versió especificada del fitxer de configuració de netplan.

Abans d'aplicar una configuració, mostrarà un resum amb els nous paràmetres i li demanarà a l'usuari que confirme l'operació (excepte si s'utilitza l'opció --force).

Abans d'aplicar la nova confirguració, el programa crearà una còpia de seguretat del fitxer de configuració del directori /etc/netplan/.

📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.