Convertir un fichier texte en fichier CSV

Résolu
JFL -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour

J'ai arrêté d'utiliser la suite
kaspersky
et je suis bloqué pour exporter mes mots de passe. Je voudrais utiliser le logiciel libre
keepass
et importer un fichier CSV contenant mes 150 passwords. Hélas, kaspersky manager ne proppose que d'exporter des fichier texte.

Qui pourrait m'aider à écrire un script python transformant le fichier texte suivant en CSV ? Étant débutant, en code python j'ai peur de ne pas y arriver. Ci-dessous, le format du fichier produit par
kaspersky
.

Merci beaucoup.

Websites

Website name: xxxxxxx
Website URL: https://xxxxxxxx.com
Login name: xxxxxxx
Login: ***@***
Password: 123456
Comment:

---

Website name:xxxxxxx
Website URL: http://xxxxxx.com
Login name: xxxxxxx
Login: xxxxxxx
Password: 123456
Comment:

---

Website name: xxxxxxx
Website URL: http://xxxxxx.com
Login name: xxxxxxx
Login: xxxxxxx
Password: 123456
Comment:

---

4 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Voilà comment tu peux faire :

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import io
    
    # Si tu utilises un fichier, tu peux supprimer cette déclaration
    data = io.StringIO("""
    Websites
    
    Website name: xxxxxxx
    Website URL: [https://xxxxxxxx.com]
    Login name: xxxxxxx
    Login: ***@***
    Password: 123456
    Comment:
    
    ---
    
    Website name:xxxxxxx
    Website URL: [http://xxxxxx.com]
    Login name: xxxxxxx
    Login: xxxxxxx
    Password: 123456
    Comment:
    
    ---
    
    Website name: xxxxxxx
    Website URL: [http://xxxxxx.com]
    Login name: xxxxxxx
    Login: xxxxxxx
    Password: 123456
    Comment:
    
    ---
    """)
    
    def parse_txt(data):
        entries = list()
        entry = dict()
        for line in data.readlines():
            line = line.strip()
            if line == "---":
                entries.append(entry)
                entry = dict()
            if ":" in line:
                tab = line.split(":")
                key = tab[0].strip()
                value = ":".join(tab[1:]).strip()
                entry[key] = value
        if entry:
            entries.append(entry)
        return entries
    
    def entries_to_csv(entries, f):
        columns = sorted(set.union(*[
            set(entry.keys())
            for entry in entries
        ]))
        print("#" + ",".join(columns), file=f)
        print(
            "\n".join(
                ",".join(
                    entry.get(key, "")
                    for key in columns
                )
                for entry in entries
            ),
            file=f
        )
    
    entries = parse_txt(data)
    
    # Avec un fichier:
    # filename_txt = "fichier.txt"
    # with open(filename_txt) as f_in:
    #    entries = parse_txt(f_in)
    
    filename_csv = "fichier.csv"
    with open(filename_csv, "w") as f_out:
        entries_to_csv(entries, f_out)


    Contenu de
    fichier.csv
    :

    #Comment,Login,Login name,Password,Website URL,Website name
    ,***@***,xxxxxxx,123456,https://xxxxxxxx.com,xxxxxxx
    ,xxxxxxx,xxxxxxx,123456,http://xxxxxx.com,xxxxxxx
    ,xxxxxxx,xxxxxxx,123456,http://xxxxxx.com,xxxxxxx


    Bonne chance
    1
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    pour t'aider, il faudrait que tu commences ton programme.
    sinon, on le ferait à ta place.
    0
  3. JFL
     
    Oui je comprends, je vais continuer à progresser sur le travail des fichiers txt avec python et proposer un code .
    0
  4. JFL
     
    Mamiemando,
    C'était costaud comme code à écrire et je suis encore loin de pouvoir générer ce que tu as écrit ! J'ai testé ton code et il marche du feu de Dieu. Grâce à toi je peux mettre Kaspersky password manager à la poubelle. Je ne sais comment te remercier.
    Bonne soirée et bon WE.
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      Je ne sais comment te remercier.

      Hé bien comme tu l'as fait, c'est très bien :-) Bonne continuation !
      0