0
votes

Comment puis-je supprimer les lignes "\ n" d'un fichier en python?

J'ai besoin de vérifier si le fichier .csv code> Je travaille avec des extrémités avec plus de 1 "\ n" code> ligne. S'il trouve plus qu'une ligne vide, il les supprime tout sauf un.

Mon code est le suivant: P>

import os
from pathlib import Path


def remove_blanks():
    dirname = os.path.dirname(os.path.abspath(__file__))
    path: Path = Path(os.path.join(dirname, "data.csv"))
    with open(path, "r+") as op:
        lines = op.readlines()
        for line in lines:
            if line == "\n":
                op.write(line.rstrip("\n"))


2 commentaires

Voulez-vous supprimer des lignes vides supplémentaires de toute séquence ou juste celle à la fin du fichier? (Cela fait une différence, car vous ne saurez pas qu'une séquence se produit à la fin du fichier jusqu'à ce que vous atteindre la fin du fichier, vous ne pouvez donc pas prendre la décision d'écrire ou de Passer immédiatement.)


@cheppner je ne suis intéressé qu'à la fin du fichier.


4 Réponses :


1
votes

Le moyen le plus simple serait de garder une trace si vous avez vu une ligne vide , puis écrivez-en une juste avant d'écrire une ligne non -empty. Xxx

Ceci réduit toute séquence de lignes vides à une seule ligne vide et écrit cette seule ligne juste avant d'écrire une ligne non vide ou la fin du fichier. Lorsque pré est la chaîne vide, écrivez-la est un non-op.

Si vous souhaitez conserver plusieurs lignes vides au milieu du fichier, accumulez la séquence de vide Lignes dans PRE Comme vous les trouvez, et à la fin du fichier, écrivez uniquement une seule ligne vide (plutôt que pré ) si pré n'est pas vide. xxx


0 commentaires

0
votes

Vous pouvez essayer d'utiliser le compteur () code>.

import os
from pathlib import Path
from collections import Counter

def remove_blanks():
    dirname = os.path.dirname(os.path.abspath(__file__))
    path: Path = Path(os.path.join(dirname, "data.csv"))
    with open(path, "r+") as op:
        lines = op.readlines()
        for line in lines:
            count = Counter()
            # Add 1 for every time word appears in line
            for word in line:
                count[word] += 1
            # Change the number of newlines to 1
            if count['\n'] > 1:
                count['\n'] = 1
            # Returns list with the number of elements
            line = list(count.elements())


0 commentaires

1
votes

oups, ne réécrivez jamais le fichier que vous lisez: il est probable que cela ne fonctionnera probablement pas ou mènera au mieux à un cauchemar de maintenance.

Si le fichier est suffisamment petit pour tenir dans la mémoire principale, ce léger changement de votre Le code pourrait suffire: xxx


1 commentaires

Merci pour la pointe sur l'ouverture du fichier! Je l'ai maintenant essayé mais il semble laisser 2 consécutives \ n peu importe la fin du fichier



0
votes

J'ai réussi à résoudre ce problème, avec ce code: xxx

Il peut supprimer chaque nouvelle ligne de l'excès, peu importe où il se trouve dans le fichier.

Merci à tous ceux qui ont essayé de m'aider!


0 commentaires