Bonjour à tous,
Voici un exercice qui permet entre autres choses de supprimer les lignes d'un fichier.
Exemple, vous voulez supprimer les lignes 0 à 3 inclus (n'oubliez pas que les indices commencent à 0)
vous devez avoir ce résultat
Nous avons bien supprimé les lignes 0, 1, 2 et 3...
Il y a deux solutions possibles, soit
SOLUTION 1:
On vous demande de créer une fonction deleteLines sous cette forme
et évidemment de là compléter...
PETITE AIDE:
J'ajoute l'algorithme afin de savoir comment compléter, solution 1 + solution 2
UTILISATION SOLUTION 1
fichiers.py est le nom de mon programme de traitement de fichier
test.txt est le fichier où se trouve les lignes à supprimer
res.txt est le fichier, résultat du fichier test.txt sans les lignes supprimées
3 et 5 sont les numéros de ligne à supprimer !
SOLUTION 2:
Assez dangereuse dans le sens où si il y a une fausse manipulation, c'est irréversible. Vous ne pourrez plus revenir en arrière pour récupérer vos lignes supprimées.
Vous devez utiliser le mode r+ pour lire et écrire votre fichier
Voici le squelette du code, car des choses nouvelles y apparaissent
UTILISATION SOLUTION 2
fichiers.py est le nom de mon programme de traitement de fichier
test.txt est le fichier à lire et à modifier
1 et 2 sont les numéros de lignes à supprimer
Si besoin de plus d'aides, vous pouvez vous servir des cours Python et demander sur ce topic une aide précise. N'oubliez pas votre interpréteur, votre fidèle allié.
Bonne continuation...
Voici un exercice qui permet entre autres choses de supprimer les lignes d'un fichier.
Exemple, vous voulez supprimer les lignes 0 à 3 inclus (n'oubliez pas que les indices commencent à 0)
Code:
id;name;nature_unit;choix;valT;val10;val_ref 0;Al2O3;Mechanical;HardnessVickers;146;213;CT_77 0;Al2O3;Mechanical;HardnessVickers;146;214;CT_78 0;Al2O3;Mechanical;HardnessVickers;146;212;CT_79 0;Al2O3;Mechanical;HardnessVickers;167;234;CT_80 0;Al2O3;Mechanical;HardnessVickers;167;237;CT_81 0;Al2O3;Mechanical;HardnessVickers;167;235;CT_82
Code:
0;Al2O3;Mechanical;HardnessVickers;167;234;CT_80 0;Al2O3;Mechanical;HardnessVickers;167;237;CT_81 0;Al2O3;Mechanical;HardnessVickers;167;235;CT_82
Il y a deux solutions possibles, soit
- On crée un nouveau fichier en écriture et on recopie que les lignes qui nous intéresse
- On supprime le fichier existant et dans ce cas nous devons enregistrer en mémoire toutes les lignes du fichier
SOLUTION 1:
On vous demande de créer une fonction deleteLines sous cette forme
Code:
import sys def deleteLines(source, destination, *n): """ source and destination -> files opened by open or with open source with option 'r' destination with option 'w' n -> lines to delete """ n = list(map(int, n)) # transformation des numéros de lignes en entier (se sont des chaînes) # Programme principal def main(arguments): source, dest, *lines = arguments[1:] # récupération des arguments ligne de commande with open(source, 'r') as s: with open(dest, 'w') as d: deleteLines(s, d, *lines) main(sys.argv)
PETITE AIDE:
Code:
>>> def test(*args): ... return args ... >>> test(1, 2, 3) (1, 2, 3)
Code:
Initialiser un compteur à la valeur 0 Pour chaque ligne lue dans le fichier Si compteur est pas dans liste des numéros de lignes (n) Écrire la ligne dans le fichier destination Incrémenter de 1 le compteur
fichiers.py est le nom de mon programme de traitement de fichier
test.txt est le fichier où se trouve les lignes à supprimer
res.txt est le fichier, résultat du fichier test.txt sans les lignes supprimées
3 et 5 sont les numéros de ligne à supprimer !
Code:
python3 fichiers.py /home/fred1599/test.txt /home/fred1599/res.txt 3 5
Assez dangereuse dans le sens où si il y a une fausse manipulation, c'est irréversible. Vous ne pourrez plus revenir en arrière pour récupérer vos lignes supprimées.
Vous devez utiliser le mode r+ pour lire et écrire votre fichier
Voici le squelette du code, car des choses nouvelles y apparaissent
Code:
import sys def deleteLine(source, *n): """ source file opened by open or with open source with option 'r+' n -> lines to delete """ n = list(map(int, n)) # transformation des numéros de lignes en entier (se sont des chaînes) lines = source.readlines() # récupération des lignes du fichier dans une liste source.seek(0) # on revient au début du fichier source.truncate() # on tronque le fichier # suite à compléter def main(arguments): source, *lines = arguments[1:] # récupération des arguments ligne de commande with open(source, 'r+') as s: deleteLine(s, *lines) main(sys.argv)
fichiers.py est le nom de mon programme de traitement de fichier
test.txt est le fichier à lire et à modifier
1 et 2 sont les numéros de lignes à supprimer
Code:
python3 fichiers.py /home/fred1599/test.txt 1 2
Bonne continuation...
Commentaire