2011-09-22 3 views
2

Je suis nouveau à la fois stackoverflow et python, donc cela peut paraître évident:lignes manquantes en annexant les fichiers

Dans cette procédure, je veux créer un nouveau fichier base de données nommée sur la liste des fichiers générés par une procédure précédente . Les fichiers de la liste sont assez gros (environ 13,6 Mo). L'objectif est d'avoir un seul fichier avec des lignes de tous les autres:

database = open('current_database', 'a') 

def file_apender(new): 
    for line in new: 
     database.write(line) 

def file_join(list_of_files): 
    for file in list_of_files: 
     file_apender(file) 

Alors si je:

file_join(a_file_list) 

Je reçois le fichier de base de données, mais 26 lignes sont portées disparues et le dernier n'a pas été terminée . est ici la fin du fichier:

63052300774565. 12 4 3 0 0.37 0.79 10.89 12.00 1.21 25.26 0.00 0.00 0.00 0.00 
63052300774565. 12 2 0 0 0.06 0.12 2.04 2.21 0.86 5.30 0.00 0.00 0.00 0.00 
63052300774565. 12 0 0 0 0.12 0.26 3.13 4.63 3.81 11.95 0.00 0.00 0.00 0.00 
63052300774565. 12 2 2 0 0.06 0.15 1.35 2.39 0.00 3.94 0.00 0.00 0.00 0.00 
63052300774565. 12 0 1 0 0.06 0.08 1.13 1.29 3.60 6.16 0.00 0.00 0.00 0.00 
63052300774565. 12 2 0 0 0.23 0.41 4.02 6.47 8.39 19.52 0.00 0.00 0.00 0.00 
63052300774565. 12 1 3 0 0.05 0.16 1.85 2.50 0.57 5.13 0 

J'ai essayé de savoir s'il y a une limitation de la mémoire ... Sinon je suis pas d'idées.

+0

avez-vous fermé votre fichier lorsque vous avez terminé? –

+0

Pouvez-vous montrer tout votre code pertinent? – garnertb

+0

Vous allez bien, je n'ai pas fermé le fichier. Le concept de fermeture était nouveau pour moi. Merci à tous pour une réponse rapide. – Sasha

Répondre

5

Je vais utiliser mes compétences de débogage psychiques, et devinez que vous ne disposez pas d'un database.close().

Si vous ne fermez pas le fichier lors de l'écriture à lui, il peut y avoir encore des données dans les tampons de sortie de Python qui n'a pas été écrit à l'OS encore. Si votre programme se termine à ce stade, les données ne sont pas écrites sur le disque et il vous manquera des données à la fin.

+2

Je pourrais vous suggérons d'utiliser un [gestionnaire de contexte] (http://docs.python.org/library/stdtypes.html#context-manager-types) à l'avenir pour éviter que les mêmes problèmes. 'avec open (chemin, 'a') comme f: f.write (ligne)'. – TorelTwiddler

Questions connexes