2017-10-11 4 views
0

Je suis novice en programmation et j'utilise ce script pour nettoyer un gros fichier texte (plus de 12 000 lignes) et l'écrire dans un autre fichier .txt. Le problème est quand exécuter ceci avec un fichier plus petit (environ 500 lignes), il s'exécute rapidement, donc ma conclusion était qu'il prend du temps en raison de la taille du fichier. Donc, si quelqu'un peut me guider pour rendre ce code efficace, il sera très apprécié.Rendre l'écriture dans un processus de fichier plus efficace

input_file = open('bNEG.txt', 'rt', encoding='utf-8') 
    l_p = LanguageProcessing() 
    sentences=[] 
    for lines in input_file.readlines(): 
     tokeniz = l_p.tokeniz(lines) 
     cleaned_url = l_p.clean_URL(tokeniz) 
     remove_words = l_p.remove_non_englishwords(cleaned_url) 
     stopwords_removed = l_p.remove_stopwords(remove_words) 
     cleaned_sentence=' '.join(str(s) for s in stopwords_removed)+"\n" 
     output_file = open('cNEG.txt', 'w', encoding='utf-8') 
     sentences.append(cleaned_sentence) 
     output_file.writelines(sentences) 
    input_file.close() 
    output_file.close() 

EDIT: est le code corrigé ci-dessous comme mentionné dans la réponse avec quelques autres modifications pour répondre à mes besoins

input_file = open('chromehistory_log.txt', 'rt', encoding='utf-8') 
    output_file = open('dNEG.txt', 'w', encoding='utf-8') 
    l_p = LanguageProcessing() 
    #sentences=[] 
    for lines in input_file.readlines(): 
     #print(lines) 
     tokeniz = l_p.tokeniz(lines) 
     cleaned_url = l_p.clean_URL(tokeniz) 
     remove_words = l_p.remove_non_englishwords(cleaned_url) 
     stopwords_removed = l_p.remove_stopwords(remove_words) 
     #print(stopwords_removed) 
     if stopwords_removed==[]: 
      continue 
     else: 
      cleaned_sentence=' '.join(str(s) for s in stopwords_removed)+"\n" 

     #sentences.append(cleaned_sentence) 
     output_file.writelines(cleaned_sentence) 
    input_file.close() 
    output_file.close() 
+0

Vous ouvrez le fichier output_file pour chaque ligne. Essayez de déplacer "output_file = open ('cNEG.txt', 'w', encoding = 'utf-8')" au-dessus de la boucle. –

+0

Merci d'avoir répondu avec une solution @RalphErdt mais il n'y a pas eu de changement significatif dans le temps –

+0

Oh .. J'ai supervisé quelque chose: Vous collectez toutes vos Strings en "phrases" et écrivez le groupe entier à chaque boucle. -> a) il suffit d'écrire dans la boucle clean_sentence (et de ne pas collecter dans "phrases") b) de rassembler tout et d'écrire juste "phrases" après la boucle. Je préfère a) car moins de mémoire intensive, mais c'est un peu plus lent. –

Répondre

0

Pour avoir la discussion réponse:

Deux problèmes sont ici:

Vous ouvrez/créez le fichier de sortie et écrivez les données dans la boucle - pour chaque ligne du fichier d'entrée e. En plus vous collectez toutes les données dans un tableau (phrases).

Vous avez deux possibilités:

a) créer le fichier avant que la boucle, et écrire dans la boucle juste « cleaned_sentence » (et supprimer les « phrases collecte »).

b) Rassemblez tout dans "phrases" et écrivez "phrases" immédiatement après la boucle. Inconvénient de a) est: c'est un peu plus lent que b) (tant que l'OS n'a pas à changer de mémoire pour b). Mais l'avantage est: Cela consomme beaucoup moins de mémoire et fonctionnera quelle que soit la taille du fichier et la quantité de mémoire installée sur l'ordinateur.

+0

Comme vous avez recommandé j'ai essayé les deux méthodes cependant collées avec la méthode (a). Encore il prend beaucoup de temps .. –

+0

S'il vous plaît signaler le code corrigé. Additionnez les heures et le nombre de lignes des différents fichiers. –

+0

J'ai ajouté le code édité ci-dessus –