UF3. Fonaments de gestió de fitxers

A01. Llibreries

1.1. Exercici 1

Implementa l’exemple 1 de la teoria (seqüència de Fibonacci) i executa’l

1.1.1. Resposta 1

  • fibonacci.py

def fib(n):
#imprimeix per pantalla la sèrie fibonacci fins al terme "n"
   a, b = 0, 1
   while b < n:
      print(b, end=' ')
      a, b = b, a+b
   print()


def fib2(n):
#Retorna la sèrie Fibonacci fins al terme "n"
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a+b
   return result
  • exercici1.py

#importo la llibreria creada
import fibonacci

#crido la funció ''fib'' amb paràmetre 1000
fibonacci.fib(1000)

#imprimeixo el resultat de la funció ''fib2'' amb paràmetre 1000
print(fibonacci.fib2(1000))

#imprimeixo el resultat del mètode ''__name__'' de la llibreria (retorna el nom d'aquesta)
print(fibonacci.__name__)

1.2. Exercici 2

Busca per Internet 5 llibreries de python3 que puguin ser útils per a tu.

1.2.1. Resposta 2

  • math: Afegeix funcionalitat amb operacions matemàtiques més complexes; encara que la llibreria cmath està preparada per a operacions més complexes. Pàgina web

  • os: Ofereix una interfície per interactuar amb el sistema operatiu ja sigui amb comandes de terminal o altres funcions. Pàgina web

  • random: Funcions relacionades amb generadors de números pseudo-aleatoris, escollir ítems aleatoris de llistes, etc. Pàgina web

  • sys: Permet accedir a variables del propi entorn Python. Pàgina web

  • datetime: Incorpora classes per a treballar amb formats de data i hora. Pot servir per a formatar variables com a dates i/o hores. Pàgina web

1.3. Exercici 3

On podries trobar les llibreries de python al teu sistema? Utilitza la llibreria sys i la variable sys.path.

1.3.1. Resposta 3

Per defecte, les llibreries es troben a /usr/lib/pythonx.y (en funció de la versió) i /usr/lib64/pythonx.y per a les llibreries de 64 bits. On ``x.y`` correspon a la versió de Python que tinguem instal·lada.

1.4 Exercici 4

Realitzar un programa amb el següent menú:

        SISTEMA DE DIAGNÒSTIC RÀPID DE FALLADES EN XARXA
************************************************************************
************ MENÚ ************
1. eina PING
2. eina TRACERT
3. eina HOSTNAME
4. eina IFCONFIG
5. eina DNS
6. eina GATEWAY

Per a poder realitzar el programa necessitarem la llibreria OS. No cal utilitzar funcions per a aquest programa.

1.4.1. Resposta 4

  • exercici4.py

import os

opcio=0
while opcio!=7:

    print("SISTEMA DE DIAGNÒSTIC RÀPID DE FALLADES EN XARXA")
    print("*************************************************")
    print("\nMENÚ")
    print("****")
    print("1. Eina PING")
    print("2. Eina TRACERT")
    print("3. Eina HOSTNAME")
    print("4. Eina IFCONFIG")
    print("5. Eina DNS")
    print("6. Eina GATEWAY")
    print("7. Sortir")

    opcio=eval(input("Tria una eina: "))
    if opcio==1:
        print("Faré 4 pings a www.google.com")
        os.system("ping -c 4 www.google.com")
    elif opcio==2:
        print("Faré un traceroute a www.google.com")
        os.system("traceroute www.google.com")
    elif opcio==3:
        print("El nom de host d'aquest sistema és")
        os.system("hostname")
    elif opcio==4:
        print("Resultat de la comanda ifconfig:")
        os.system("ifconfig -a")
    elif opcio==5:
        print("L'adreça IP de google.com és")
        os.system("host google.com")
    elif opcio==6:
        os.system("ping -c 4 gateway")
    elif opcio==7:
        print("Fins aviat")
    else:
        print("opció incorrecta")

1.5. Exercici 5

Fent servir la llibreria datetime realitza l’exercici següent:

Hora i dia actual:  2018-05-02 13:04:21.221194
Hora i dia actual amb format:  18-05-02-13-04
Any Actual:  2018
Mes actual:  May
Setmana de l'any:  18
Dia de la setmana en número:  3
Dia de l'any:  122
Dia del mes:  02
Dia de la setmana:  Wednesday

No cal utilitzar funcions per aquest programa. Per poder donar-li el format desitjat a datetime, hauràs de fer servir strtime

  • Exemple: datetime.date.today().strftime("%c"))

1.5.1. Resposta 5

  • exercici5.py

import time

print("Hora i dia actual: %s" % time.strftime("%Y-%m-%d %H:%M:%S.%f"))
print("Hora i dia actual amb format: %s" % time.strftime("%y-%m-%d-%H-%M"))
print("Any actual: %s" % time.strftime("%Y"))
print("Mes actual: %s" % time.strftime("%b"))
print("Setmana de l'any: %s" % time.strftime("%W"))
print("Dia de la setmana en número: %s" % time.strftime("%w"))
print("Dia de l'any: %s" % time.strftime("%j"))
print("Dia del mes: %s" % time.strftime("%d"))
print("Dia de la setmana: %s" % time.strftime("%a"))

A02. Fitxers

2.1 Exercici 1

Realitza un algorisme que llegeixi les 100 primeres línies del fitxer de text diccionari.txt penjat al moodle i les imprimeixi

2.1.1. Resposta 1

  • exercici1.py

arxiu = open('castellano.txt','r')

for i in range(100):
  cadena2 = arxiu.readline()
  print(cadena2, end="")

arxiu.close

2.2. Exercici 2

Modifica el programa anterior per crear un fitxer nou anomenat primeres.txt amb les 100 primeres paraules del diccionari. No ha sortir per pantalla, hauràs d’obrir el fitxer nou

2.2.1. Resposta 2

  • exercici2.py

fi = open('castellano.txt','r')
fo = open('primers.txt','w')

for i in range(100):
  cadena2 = arxiu.readline()
  fo.write(cadena2)

fi.close
fo.close

2.3. Exercici 3

Obri el fitxer diccionari.txt i elimina tots el caràcters ' que apareixen al començament d’algunes paraules, així com tot el que hi ha després de la /. Crea un nou fitxer, diccio2.txt amb les paraules netes. Utilitza la llibreria estàndard de python string. Aquesta llibreria no l’has d’importar

2.3.1. Resposta 3

  • exercici3.py

fi = open('castellano.txt','r')
fo = open('diccio2.txt','w')

for i in fi:
  cadena2 = fi.readline()
  if cadena2.startswith("'")
    cadena2 = cadena2[1:]
  pos = cadena2.find('/')

  if pos != -1:
    cadena2 = cadena2[:pos]+"\n" #Afegit perquè si eliminem la resta de la línia, també ens mengem el salt de línia, i amb això, l'afegim

  fo.write(cadena2)

fi.close
fo.close

2.4. Exercici 4

Realitza un algorisme que llegeixi totes les paraules que comencin per una paraula donada per l’usuari. Has de fer servir el nou diccionari, diccio2.txt.

2.4.1. Resposta 4

  • exercici4.py

lletra = input("Per quina lletra començarà la paraula? ")

fi = open('diccio2.txt','r')

for i in fi:
  cadena2 = fi.readline()

if cadena2.startswith(lletra):
  print(cadena2)

fi.close

2.5. Exercici 5

Realitza un algorisme que torni una paraula en random del diccionari. Has de fer servir el nou diccionari, diccio2.txt. Per saber de quant és el random, compta el número de paraules que té. Pot ser útil fer servir llistes.

2.5.1. Resposta 5

  • exercici5.py

def treuInfo(fitxer):
  text = []
  f = open(fitxer,'r')
  text = f.readlines()

  f.close

  return text

def numerosAlea(limit):
  import random
  return random.randint(0,limit)

lst=[]
lst=treuInfo("diccio2.txt")
total=len(lst)
pos=numeroAlea(total)
print(pos)
print(lst[pos])

2.6. Exercici 6

Tenim un fitxer que es diu alumnes.txt amb el següent contingut

joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89

Hi ha una línia per cada estudiant i en cadascuna hi ha el nom de l’estudiant i una sèrie de notes de pràctiques. Realitza un programa que mostri els estudiants que han lliurat més de X pràctiques. El número de pràctiques es demanarà a l’usuari. Realitza el control d’excepcions i validació de l’entrada de dades. El número de pràctiques no pot ser negatiu ni lletres. Pots fer servir el mètode split.

  • Sortida esperada

Quantes pràctiques ha de fer?: a
Has d'introduir un número.

Quantes pràctiques ha de fer?: -2
No pots posar números negatius o 0

Quantes pràctiques ha de fer?: 5

alumne:  sue , Nº pràctiques:  12
alumne:  grace , Nº pràctiques:  6

2.6.1. Resposta 6

  • exercici6.py

archivo=open('alumnes.txt','r')
lista=[]
pract=int(input("Quantes pràctiques a de fer per aprovar: ")
while pract>0:
    try:
    for line in archivo.readlines():
        lista=line.split()
        elements=(len(lista)-1)

        if elements>=pract:
            print(lista)
    else:
    print("Ha de ser major de 0")

    except ValueError:
    print("Només pots possar numeros")


archivo.close()