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()
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. –
Merci d'avoir répondu avec une solution @RalphErdt mais il n'y a pas eu de changement significatif dans le temps –
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. –