2017-05-09 4 views
2

J'ai plusieurs fichiers texte qui contiennent deux à trois lignes de texte. J'ai besoin de réécrire ces fichiers afin d'avoir des listes en eux pour rendre les données structurées. Je ne trouve pas le moyen de le résoudre avec plusieurs fichiers automatisant la tâche.Comment réécrire plusieurs contenus de fichiers texte à des listes dans le même fichier?

import sys 
import glob 

path = '*.txt' 
files = glob.glob(path) 

contents = [] 
for name in files: 
    with open(name) as f: 
     lines = f.read().splitlines() 
     contents.append(lines) 

Texte avant:

Announcement 
45 789 answers 
Rules obliged 

texte après la réécriture:

Announcement, 45 789 answers,Rules obliged 

Code de travail final

importation glob

path = '* txt'
fichiers = glob.glob (chemin)

contenu = []

pour le nom dans les fichiers: # Aucune modification apportée à votre code de lecture ouvert avec (nom) comme f: lignes = f.read() .splitlines() # remplace les fichiers d'origine, place le texte sur une ligne, séparé par # virgule + espace avec open (nom, "w") comme f: f.write ("," .join (lignes)) f.write ("\ n") # ajouter un saut de ligne facultatif pour la ligne unique

Répondre

2

Vous pouvez écraser vos fichiers avec une version jointe des lignes de fichier:

for name in files: 
    # no change made to your reading code 
    with open(name) as f: 
     lines = f.read().splitlines() 
    # overwrite the original files, put the text in one line, separated by comma+space 
    with open(name,"w") as f: 
     f.write(", ".join(lines)) 
     f.write("\n") # add optional linefeed for the sole line 

Notez qu'il donne:

Announcement, 45 789 answers, Rules obliged 

pas

Announcement, 45 789 answers,Rules obliged 

Notez également que si un problème se produit lors de l'écriture sauvegarder le fichier (disque plein, erreur de syntaxe python, interruption clavier ...), le fichier original est détruit. Pour jouer en toute sécurité, vous pouvez écrire dans un autre nom, et déplacez le fichier lorsque OK:

 with open(name+".bak","w") as f: 
     f.write(", ".join(lines)) 
     f.write("\n") # add optional linefeed for the sole line 
    shutil.move(name+".bak",name) 

que les deux fichiers sont sur le même système de fichiers, il n'y a pas de problème de performance (supprimer + renommer)

+0

Merci ! J'ai testé le premier code et il a fait le travail. –