Diferència entre revisions de la pàgina «ASIX-M3-UF3-Banc de Solucions»
(→Getió de fitxers i directoris) |
(→Fitxers de text) |
||
(Hi ha 16 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 16: | Línia 16: | ||
print("Directori %s creat!" %rutaAbsoluta) | print("Directori %s creat!" %rutaAbsoluta) | ||
</source> | </source> | ||
− | |||
--> | --> | ||
− | 2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia. El programa ha de cercar tots els fitxers en el | + | 2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”. |
+ | <!-- | ||
+ | <source lang="python"> | ||
+ | import os | ||
+ | |||
+ | extensions=input("Extensions fitxers: ") | ||
+ | extOrigen=extensions[0:3] | ||
+ | extDesti=extensions[4:7] | ||
+ | ruta=input("Directori: ") | ||
+ | rutaAbsoluta = os.path.abspath(ruta) | ||
+ | if os.path.exists(ruta): | ||
+ | for fitxer in os.listdir(rutaAbsoluta): | ||
+ | if fitxer.endswith('.'+extOrigen): | ||
+ | os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti) | ||
+ | print("Cambiada extensió fitxer:", fitxer) | ||
+ | else: | ||
+ | print("El directori %s no existeix!" %rutaAbsoluta) | ||
+ | </source> | ||
+ | --> | ||
+ | |||
+ | 3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error. | ||
+ | |||
+ | <source lang="python"> | ||
+ | >>> os.stat('uno.txt').st_size | ||
+ | 2899 | ||
+ | </source> | ||
+ | |||
+ | <!-- | ||
+ | <source lang="python"> | ||
+ | import os | ||
+ | |||
+ | BYTES = 1024 | ||
+ | ruta=input("Directori: ") | ||
+ | rutaAbsoluta = os.path.abspath(ruta) | ||
+ | midaFitxer=int(input('Mida fitxer (kb): ')) | ||
+ | if os.path.exists(ruta): | ||
+ | for fitxer in os.listdir(rutaAbsoluta): | ||
+ | if os.stat(rutaAbsoluta+'/'+fitxer).st_size > midaFitxer * BYTES: | ||
+ | print(fitxer) | ||
+ | else: | ||
+ | print("El directori %s no existeix!" %rutaAbsoluta) | ||
+ | </source> | ||
+ | --> | ||
+ | |||
+ | 4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives). | ||
+ | |||
+ | <!-- | ||
+ | <source lang="python"> | ||
+ | import os | ||
+ | |||
+ | def cercarFiles(directori,nomFitxer): | ||
+ | for fitDir in os.listdir(directori): | ||
+ | if os.path.isfile(directori+'/'+fitDir): | ||
+ | if fitDir.find(nomFitxer) != -1: | ||
+ | print('Fitxer: '+directori+'/'+fitDir) | ||
+ | else: | ||
+ | cercarFiles(directori+'/'+fitDir,"nomFitxer") | ||
+ | |||
+ | ruta=input("Directori: ") | ||
+ | rutaAbsoluta = os.path.abspath(ruta) | ||
+ | if os.path.exists(ruta): | ||
+ | cercarFiles(rutaAbsoluta,"dos") | ||
+ | else: | ||
+ | print("El directori %s no existeix!" %rutaAbsoluta) | ||
+ | </source> | ||
+ | --> | ||
+ | |||
==Fitxers de text== | ==Fitxers de text== | ||
Línia 51: | Línia 116: | ||
<!-- | <!-- | ||
<source lang="python"> | <source lang="python"> | ||
− | from io import open | + | # from io import open |
fitxer_emp = open('empleats.txt','r', encoding="utf8") | fitxer_emp = open('empleats.txt','r', encoding="utf8") | ||
Línia 68: | Línia 133: | ||
</source> | </source> | ||
--> | --> | ||
+ | |||
+ | 2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres: | ||
+ | |||
+ | :* Si no rep cap paràmetre mostrarà el número. | ||
+ | :* Si rep només un a paràmetre: | ||
+ | ::- Si és "inc" mostrarà el número incrementat amb 1 i actualitzarà el fitxer amb el nou valor. | ||
+ | ::- Si és "dec" mostrarà el número decrementat amb 1 i actualitzarà el fitxer amb el nou valor. | ||
+ | ::- Qualsevol altra valor, mostrarà un missatge informant del fet. | ||
+ | :* Si rep dos paràmetres: | ||
+ | ::- Si el primer és "inc" i el segon un enter (num) mostrarà el número incrementat amb num i actualitzarà el fitxer amb el nou valor. | ||
+ | ::- Si és "dec" i el segon un enter (num) mostrarà el número decrementat amb num i actualitzarà el fitxer amb el nou valor. | ||
+ | ::- Qualsevol altra combinació de valors en els paràmetres, mostrarà un missatge informant del fet. | ||
+ | |||
+ | :* Utilitzeu excepcions (Blocs try - except) per tractar qualsevol error no previst. | ||
+ | |||
+ | <!-- | ||
+ | <source lang="python"> | ||
+ | def comptador(*args): | ||
+ | if len(args) > 2: | ||
+ | print("Número de paràmetres incorrecte") | ||
+ | else: | ||
+ | fitCom = open("comptador.txt","r+") | ||
+ | if len(args) == 0: | ||
+ | print(fitCom.readline()) | ||
+ | elif len(args)==1: | ||
+ | if args[0]!="inc" and args[0]!="dec": | ||
+ | print("Valor del paràmetre incorrecte!") | ||
+ | else: | ||
+ | if args[0]=="inc": | ||
+ | compt = int(fitCom.readline())+1 | ||
+ | else: | ||
+ | compt = int(fitCom.readline())-1 | ||
+ | print(compt) | ||
+ | fitCom.seek(0) | ||
+ | fitCom.write(str(compt)+'\n') | ||
+ | elif (args[0]!="inc" and args[0]!="dec") or not isinstance(args[1],int) or not int(args[1])>0: | ||
+ | print("Paràmetres incorrectes!!") | ||
+ | else: | ||
+ | if args[0]=="inc": | ||
+ | compt = int(fitCom.readline())+int(args[1]) | ||
+ | else: | ||
+ | compt = int(fitCom.readline())-int(args[1]) | ||
+ | print(compt) | ||
+ | fitCom.seek(0) | ||
+ | fitCom.write(str(compt)+'\n') | ||
+ | fitCom.close() | ||
+ | |||
+ | comptador("dec", 5) | ||
+ | </source> | ||
+ | --> | ||
+ | 3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original "_cod" i amb la mateixa extensió. L'algoritme de xifrat consisteix en: | ||
+ | :* caràcters de la "a" a la "z": restar 11 per obtenir el caràcter xifrat. | ||
+ | :* caràcters de la "A" a la "Z": sumar 15 per obtenir el caràcter xifrat. | ||
+ | :* caràcters del "0" al "9": sumar 13 per obtenir el caràcter xifrat. | ||
+ | :* la resta de caràcters no es modifiquen | ||
+ | <!-- | ||
+ | <source lang="python"> | ||
+ | import os | ||
+ | |||
+ | |||
+ | def codificar(nomFitxer): | ||
+ | partsFitxer = nomFitxer.split(".") | ||
+ | nomFitxerCodificar= partsFitxer[0]+"_cod."+partsFitxer[1] | ||
+ | fitACodificar = open(nomFitxer,'r') | ||
+ | fitCodificat = open(nomFitxerCodificar,'w') | ||
+ | for linia in fitACodificar: | ||
+ | liniaCod ="" | ||
+ | for i in range(0,len(linia)): | ||
+ | carCod= ord(linia[i]) | ||
+ | if linia[i] >= 'a' and linia[i]<='z': | ||
+ | carCod = (ord(linia[i]) - 11) | ||
+ | elif linia[i] >= 'A' and linia[i]<='Z': | ||
+ | carCod = (ord(linia[i]) + 15) | ||
+ | elif linia[i] >= '0' and linia[i]<='9': | ||
+ | carCod = (ord(linia[i]) + 13) | ||
+ | liniaCod += chr(carCod) | ||
+ | fitCodificat.write(liniaCod) | ||
+ | fitACodificar.close() | ||
+ | fitCodificat.close() | ||
+ | |||
+ | nomFitxer=input("Nom fitxer a codificar: ") | ||
+ | if os.path.exists(nomFitxer): | ||
+ | codificar(nomFitxer) | ||
+ | else: | ||
+ | print("Fitxer no existeix!") | ||
+ | |||
+ | </source> | ||
+ | --> | ||
+ | 4. El fitxer comarques.txt conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per: | ||
+ | |||
+ | :*1. Mostrar totes les comarques que comencin per una lletra i el nombre total de les mateixes. | ||
+ | :*2. Crear un diccionari amb la primera lletra de cada comarca com a clau i el número de comarques que comencen per aquesta lletra. | ||
+ | :*3. Crear un nou fitxer amb les dades del diccionari de l'apartat 2, una lletra per línia i el número separat per tabulador ('\t'); | ||
+ | :*4. A partir del fitxer anterior sumi i ens mostri quantes comarques hi ha (podeu utilitzar els mètodes dels strings split i rstrip. | ||
+ | <!-- | ||
+ | <source lang="python"> | ||
+ | def menu(*args): | ||
+ | opcions = [] | ||
+ | print("") | ||
+ | for opcio in args: | ||
+ | print(opcio) | ||
+ | opcions.append(opcio[:1]) | ||
+ | print("") | ||
+ | op = input("Escull opció: ") | ||
+ | while op not in opcions: | ||
+ | op = input("Escull opció: ") | ||
+ | return op | ||
+ | |||
+ | def comarquesString(cad): | ||
+ | fitCom = open("comarques.txt","r") | ||
+ | for comarca in fitCom: | ||
+ | if comarca.find(cad)!=-1: | ||
+ | print(comarca, end="") | ||
+ | |||
+ | def comarquesInicial(): | ||
+ | fitCom = open("comarques.txt","r") | ||
+ | comarca = fitCom.readline() | ||
+ | comarquesPerLletra = {} | ||
+ | while comarca != "": | ||
+ | iniciLletra = comarca[0] | ||
+ | cont = 1 | ||
+ | comarca = fitCom.readline() | ||
+ | while comarca != "" and comarca[0] == iniciLletra : | ||
+ | cont += 1 | ||
+ | comarca = fitCom.readline() | ||
+ | comarquesPerLletra[iniciLletra]= cont | ||
+ | fitCom.close() | ||
+ | return comarquesPerLletra | ||
+ | |||
+ | def fitxerComarquesInicial(comPerLl): | ||
+ | fitComIni = open("comarquesInicial.txt","w") | ||
+ | for inicial, num in comPerLl.items(): | ||
+ | fitComIni.write(inicial+'\t'+str(num)+'\n') | ||
+ | fitComIni.close() | ||
+ | |||
+ | def numComarques(): | ||
+ | fitComIni = open("comarquesInicial.txt","r") | ||
+ | numCom = 0 | ||
+ | for comInicial in fitComIni: | ||
+ | inicialNum = comInicial.split('\t') | ||
+ | numCom += int(inicialNum[1].rstrip('\n')) | ||
+ | fitComIni.close() | ||
+ | return numCom | ||
+ | |||
+ | |||
+ | opc = menu("1. Mostrar comarques nom", "2. Comarques per inicial", "3. Fitxer comarques inicial", "4. Total comarques", "5. Sortir") | ||
+ | comarquesPerLletra={} | ||
+ | while opc != 5: | ||
+ | if opc=="1": | ||
+ | cad = input("Introdueix la cadena a cercar: ") | ||
+ | comarquesString(cad) | ||
+ | elif opc=="2": | ||
+ | comarquesPerLletra = comarquesInicial() | ||
+ | print(comarquesPerLletra) | ||
+ | if opc=="3": | ||
+ | fitxerComarquesInicial(comarquesPerLletra) | ||
+ | if opc=="4": | ||
+ | numCom=numComarques() | ||
+ | print("Hi ha un total de %d comarques" %numCom) | ||
+ | opc = menu("1. Mostrar comarques nom", "2. Comarques per inicial", "3. Fitxer comarques inicial", "4. Total comarques", "5. Sortir") | ||
+ | </source> | ||
+ | --> | ||
+ | |||
+ | |||
+ | |||
[https://docs.hektorprofe.net/python/manejo-de-ficheros/ejercicios/] | [https://docs.hektorprofe.net/python/manejo-de-ficheros/ejercicios/] |
Revisió de 19:47, 24 maig 2021
Getió de fitxers i directoris
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.
>>> os.stat('uno.txt').st_size
2899
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).
Fitxers de text
1. Fes un programa que crei un diccionari en les dades dels empleats del fitxer de text empleats.txt. Y a continuació, el recorri mostrant les seves dades.
Format del diccionari:
- Clau: Id de la persona
- Valor: Llista amb Nom, Cognom i Salari
Creeu prèviament el fitxer de text amb el següent format: Id;Nom;Cognom;Sou (un a cada línia).
Exemple de la sortida:
Id Nom Cognoms Sou ---------------------------- 123H Pere Pou 900 547A Maria Roda 1500 784K Luis Abadal 1300 465F Raquel Busquet 1600
- Fitxer:
123H;Pere;Pou;900 547A;Maria;Roda;1500 784K;Luis;Abadal;1300 465F;Raquel;Busquet;1600
2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres:
- Si no rep cap paràmetre mostrarà el número.
- Si rep només un a paràmetre:
- - Si és "inc" mostrarà el número incrementat amb 1 i actualitzarà el fitxer amb el nou valor.
- - Si és "dec" mostrarà el número decrementat amb 1 i actualitzarà el fitxer amb el nou valor.
- - Qualsevol altra valor, mostrarà un missatge informant del fet.
- Si rep dos paràmetres:
- - Si el primer és "inc" i el segon un enter (num) mostrarà el número incrementat amb num i actualitzarà el fitxer amb el nou valor.
- - Si és "dec" i el segon un enter (num) mostrarà el número decrementat amb num i actualitzarà el fitxer amb el nou valor.
- - Qualsevol altra combinació de valors en els paràmetres, mostrarà un missatge informant del fet.
- Utilitzeu excepcions (Blocs try - except) per tractar qualsevol error no previst.
3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original "_cod" i amb la mateixa extensió. L'algoritme de xifrat consisteix en:
- caràcters de la "a" a la "z": restar 11 per obtenir el caràcter xifrat.
- caràcters de la "A" a la "Z": sumar 15 per obtenir el caràcter xifrat.
- caràcters del "0" al "9": sumar 13 per obtenir el caràcter xifrat.
- la resta de caràcters no es modifiquen
4. El fitxer comarques.txt conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per:
- 1. Mostrar totes les comarques que comencin per una lletra i el nombre total de les mateixes.
- 2. Crear un diccionari amb la primera lletra de cada comarca com a clau i el número de comarques que comencen per aquesta lletra.
- 3. Crear un nou fitxer amb les dades del diccionari de l'apartat 2, una lletra per línia i el número separat per tabulador ('\t');
- 4. A partir del fitxer anterior sumi i ens mostri quantes comarques hi ha (podeu utilitzar els mètodes dels strings split i rstrip.