Salta el contingut
 

Exercicis: Operacions amb fitxers

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

En aquests exercicis es treballen:

  • 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 l'estructura següent:

  • 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: Ú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 només 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: Ú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 informació següent:

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

En sistemes Windows es poden utilitzar els fitxers del WSL

f = open("\\\\wsl.localhost\\Ubuntu\\etc\\passwd", "r")
Exemple: 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 arguments següents:

  • 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: Ú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 sintaxi 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 demanarà 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 la persona usuària.
  • --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 demanarà a la persona usuària que confirme l'operació (excepte si s'utilitza l'opció --force).

Abans d'aplicar la nova configuració, 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.