2 votes

comment obtenir des données à partir d'un fichier texte et les réécrire dans un autre à partir de

  • Bonjour à tous, j'ai un fichier texte comme celui-ci :

  • utilisateur = utilisateur447

  • passe = 455555az

  • type = enregistré

  • date = 1 an

    et je veux lire le fichier et le réécrire comme ceci

  1. utilisateur|pass|type|date, ligne par ligne, J'ai essayé tant de façons, je suis coincé depuis que je dois gérer un million de comptes.
with open(file, "r") as f:
 data = []
 for line in f:
    key = line.rstrip('\n').split('=')
    key1 = key[1:2]

2voto

ti7 Points 1865

Vous n'avez pas besoin de lire tout le fichier en une seule fois, vous pouvez le lire par parties et écrire au fur et à mesure que vous lisez (notez la balise with Le bloc est utilisé pour deux open() les gestionnaires de contexte, bien que vous puissiez les imbriquer les uns dans les autres tout aussi facilement)

with open(source) as fh_src, open(destination, "w") as fh_dest:
    block = []
    for lineno, line in enumerate(fh_src, 1):
        # .split("=", 1)[-1] captures everything after the first =
        # this is also an opportunity to verify the key
        block.append(line.split("=", 1)[-1].strip())
        if len(block) == 4:
            fh_dest.write("{}|{}|{}|{}\n".format(*block))
            block = []  # reset block after each write

Mais cela vaut vraiment la peine de mettre en place des garde-fous !

  • vérifier si les lignes commencent vraiment avec une clé si vous avez un ensemble de clés connues ou si vous avez l'intention d'en omettre certaines, ou si vous avez un ensemble dynamique de clés (disons que certains utilisateurs ont une collection de hachages de mots de passe précédents, ou des commentaires différents)
  • vérification de if block à la fin (cela devrait être effacé et écrit !)
  • vérification de = est réellement dans chaque ligne ou que tout commentaire est conservé ou écarté.
  • ouverture du site "w" supprimera destination s'il existe déjà (peut-être à la suite d'une précédente exécution bâclée), ce qui peut être indésirable.

( lineno est seulement inclus pour simplifier la découverte des mauvaises lignes)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X