Annonce

Réduire
Aucune annonce.

EXERCICES[SIMPLE] en Python Suppression de lignes dans un fichier

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • EXERCICES[SIMPLE] en Python Suppression de lignes dans un fichier

    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)

    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
    vous devez avoir ce résultat

    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
    Nous avons bien supprimé les lignes 0, 1, 2 et 3...

    Il y a deux solutions possibles, soit
    1. On crée un nouveau fichier en écriture et on recopie que les lignes qui nous intéresse
    2. 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)
    et évidemment de là compléter...

    PETITE AIDE:

    Code:
    >>> def test(*args):
    ...     return args
    ... 
    >>> test(1, 2, 3)
    (1, 2, 3)
    J'ajoute l'algorithme afin de savoir comment compléter, solution 1 + solution 2

    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
    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 !

    Code:
    python3 fichiers.py /home/fred1599/test.txt /home/fred1599/res.txt 3 5
    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

    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)
    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

    Code:
    python3 fichiers.py /home/fred1599/test.txt 1 2
    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...
    Dernière modification par fred, 10 août 2014, 07h42.

  • #2
    Code:
    lines = open('input.txt').readlines()
    open('output.txt', 'w').writelines(lines[4:])
    †vKs|

    Commentaire


    • #3
      @Sonny,

      Ça ne va pas, imaginons que je veuille supprimer la ligne 0 et la ligne 3, je fais comment avec cette solution ?

      Qui puis est source et destination sont déjà des fichiers ouverts dans le mode adéquate, voir la documentation de ma fonction deleteLines et deleteLine
      donc source et destination ne sont pas des chaînes de caractères, mais des objets fichier...

      Commentaire

      Chargement...
      X