Formation I.S.N.

Les fichiers - Exercices supplémentaires

Plus tard ! Les programmes ci-dessous ne sont pas à réaliser le jour de la formation (sauf s'il vous reste du temps bien évidemment). Ils sont là pour vous donner d'autres idées d'exercices (ou vous entraîner si besoin).

Trier des informations

Le fichier materiel.txt a été établi par un responsable informatique qui a établi une liste des ordinateurs présents dans chaque salle. Chaque ligne du fichier est écrite uniquement en lettres minuscules sous la forme :

constructeur année_d_achat quantité caractéristiques

Chaque modèle d'ordinateur peut avoir plusieurs caractéristiques, séparées par un espace comme les autres informations de la ligne.

  1. Concevoir un programme qui permette de connaître le nombre de machines par constructeur. Si un constructeur est présent sur plusieurs lignes, il faudra donc additionner les quantités correspondantes. Le fichier nb_materiel.txt sera donc constitué de lignes sous la forme :
    constructeur1 quantité1
    constructeur2 quantité2
    constructeur3 quantité3
    etc...
  2. Parmi les caractéristiques, certains postes tournent sous système d'exploitation Linux. Modifier le programme précédent afin d'obtenir le fichier materiel_linux.txt qui sera constitué, uniquement pour le matériel tournant sous Linux, de lignes de la forme :
    constructeur1 quantité1
    constructeur2 quantité2
    constructeur3 quantité3
    etc...
  • Une astuce
  • Une solution pour le programme n°1
  • Une solution pour le programme n°2

On considère la chaîne de caractère :


texte = "Bonjour, comment ça va ?"

Que renvoie la console Python après l'instruction :


print(texte.split(" "))

##----- Ouverture des fichiers -----##
fsource = open('materiel.txt', 'r')
fsortie = open('nb_materiel.txt', 'w')

##----- Variables et constantes -----##
liste_constructeurs = []
liste_quantite = []

##----- Programme principal -----##
for ligne in fsource:
    liste = ligne.split(" ")                    # Ligne transformée en liste de mots
    if liste[0] not in liste_constructeurs:
        liste_constructeurs.append(liste[0])
        liste_quantite.append(int(liste[2]))    # Quantité transformée en entier
    else:
        indice = liste_constructeurs.index(liste[0])
        liste_quantite[indice] += int(liste[2])

for i in range(len(liste_constructeurs)):
    fsortie.write(liste_constructeurs[i])
    fsortie.write(" ")
    fsortie.write(str(liste_quantite[i]))    	# Retour à la chaîne de caractères
    fsortie.write("\n")
    
##----- Fermeture des fichiers -----##
fsource.close()
fsortie.close()

Seule la ligne 13 a été ajoutée, suivie des indentations nécessaires et d'un renommage du fichier à obtenir.


##----- Ouverture des fichiers -----##
fsource = open('materiel.txt', 'r')
fsortie = open('materiel_linux.txt', 'w')

##----- Variables et constantes -----##
liste_constructeurs = []
liste_quantite = []


##----- Programme principal -----##
for ligne in fsource:
    liste = ligne.split(" ")                    # Ligne transformée en liste de mots
    if 'linux' in liste:
        if liste[0] not in liste_constructeurs:
            liste_constructeurs.append(liste[0])
            liste_quantite.append(int(liste[2]))    # Quantité transformée en entier
        else:
            indice = liste_constructeurs.index(liste[0])
            liste_quantite[indice] += int(liste[2])

for i in range(len(liste_constructeurs)):
    fsortie.write(liste_constructeurs[i])
    fsortie.write(" ")
    fsortie.write(str(liste_quantite[i]))
    fsortie.write("\n")
    
##----- Fermeture des fichiers -----##
fsource.close()
fsortie.close()

Diaporama en Html

Concevoir un programme qui permet de générer de manière automatique 10 fichiers .html.

Ces fichiers seront nommés automatiquement page_X.htmlX correspond au numéro de la page. Ces pages sont destinées à devenir un diaporama donc elles doivent toutes faire appel à un même fichier css_diaporama.css téléchargeable en cliquant ici et à placer dans le répertoire courant des fichiers créés par le programme.

De plus, chaque page n doit contenir un lien vers la page suivante n+1 et vers la page précédente n-1. Attention, la page 9 doit être reliée à la page 0 et vice-versa.

Il faut étudier le fichier .css afin de définir correctement les balises nécessaires.

On présente ci-dessous l'aspect final de la page 5 ouverte dans un navigateur :

  • Une piste
  • Une solution

Un papier et un crayon permettront de détailler les balises nécessaires à la conception des pages. Écrire ensuite ces balises dans chaque fichier.


n = 10					# Nombre de fichiers

for i in range(n):
    f = open('page_{}.html'.format(i), 'w')
    
    f.write(' \n')
    f.write(' \n')
    f.write(' \n')
    f.write(' \n')
    f.write(' Diaporama  \n')
    f.write(' \n')
    f.write(' \n')
    
    f.write(' \n')
    f.write('
Diaporama - Page {}
\n'.format(i)) f.write('
\n') f.write('

Un paragraphe de blabla

\n') f.write('
\n') if i != 0: preced = i-1 else: preced = 9 suivant = (i+1)%10 f.write(' \n') f.write(' \n') f.write(' \n') f.close()

Seule la ligne 13 a été ajoutée, suivie des indentations nécessaires et d'un renommage du fichier à obtenir.


##----- Ouverture des fichiers -----##
fsource = open('materiel.txt', 'r')
fsortie = open('materiel_linux.txt', 'w')

##----- Variables et constantes -----##
liste_constructeurs = []
liste_quantite = []


##----- Programme principal -----##
for ligne in fsource:
    liste = ligne.split(" ")                    # Ligne transformée en liste de mots
    if 'linux' in liste:
        if liste[0] not in liste_constructeurs:
            liste_constructeurs.append(liste[0])
            liste_quantite.append(int(liste[2]))    # Quantité transformée en entier
        else:
            indice = liste_constructeurs.index(liste[0])
            liste_quantite[indice] += int(liste[2])

for i in range(len(liste_constructeurs)):
    fsortie.write(liste_constructeurs[i])
    fsortie.write(" ")
    fsortie.write(str(liste_quantite[i]))
    fsortie.write("\n")
    
##----- Fermeture des fichiers -----##
fsource.close()
fsortie.close()