Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème de vitesse exécution d'un script [ Divers / Trucs & Astuces ] (MasterID)

samedi 17 mai 2008 à 17:41:39 | Problème de vitesse exécution d'un script

MasterID

Bonjour,

j'ai réalisé un script qui récupère des informations dans un fichier texte, les traitent et retourne un autre fichier texte.
Le fichier texte créé peut-être très très lourd (plusieurs dizaines de Mo, sur plusieurs centaines de milliers de lignes).

Pour ce faire, chaque nouvelle ligne créée est concaténée dans une variable globale (il y a plusieurs boucles imbriquées d'où la longueur du fichier final) et ce n'est qu'à la fin du script que je crée le fichier et y entre toutes les informations.

Après différents tests, il semble que c'est la concaténation des nouvelles lignes dans la variable globale qui prend de plus en plus de temps (je suppose que plus cette variable grossi plus python a dû mal à y ajouter du texte).

J'aimerais savoir comment y palier, car il m'est quasiment impossible de créer un fichier qui dépasse les 10Mo.

Quelle est la méthode optimale ? La création de plusieurs variables globales intermédiaires afin de réduire la taille de chacune et ainsi faciliter la concaténation ? Ecrire au fur et à mesure dans le fichier  ? (bien que je préfèrerais que le fichier ne soit pas créé tant que le script n'est pas terminé, et qu'il me semble que les accès fichier sont très long).

Voilà, j'espère que vous pourrez m'aider, je ne programme que pour le plaisir, je n'ai que peu de notion sur l'efficacité d'un script.

Au revoir.

lundi 19 mai 2008 à 00:12:46 | Re : Problème de vitesse exécution d'un script

lespinx

Réponse acceptée !
Bonsoir MasterID

Je suppose que pour concaténer la variable tu utilises la méthode:
chaine = chaine + "aaaaa"
ou bien
chaine += "aaaaa"

Je ne crois pas me tromper en disant que sous Python l'objet chaine n'est pas modifiable.
Pour pouvoir réaliser l'instruction "chaine = chaine + "aaaaa" Python doit détruire l'ancien objet chaine pour pouvoir recréer le nouvel objet chaine, ce qui devient rapidement très couteux.

Je suggère de stocker les variables intermédiaires dans une liste et de réaliser la concaténation finale par la méthode ".join"

lst_chaine = []
lst_chaine.append("aaaaaaaa")
lst_chaine.append("bbbbbbb")
lst_chaine.append("ccccc")
#Concaténation finale
chaine = "".join(lst_chaine)
print chaine

Malgré tout, je pense que l'écriture au fur et mesure dans un fichier en sortie me semble plus naturel et pas obligatoirement plus long.
L'écriture est asynchrone seul le remplissage du buffer ralentira le traitement.
Le mieux est de faire un test.

Cordialement


vendredi 23 mai 2008 à 15:30:54 | Re : Problème de vitesse exécution d'un script

MasterID

Bonjour,

Merci beaucoup, j'ai utilisé la méthode .join après avoir stocké les variables dans une table, le résultat est plutôt concluant. J'ai pu créer un fichier texte de 20.9 Mo sur 370 000 lignes en 20 secondes, ce qui est amplement suffisant.
Je n'ai pas essayé d'écrire au fur et à mesure dans le fichier, mais y-a-t'il un moyen de supprimer le fichier en cas d'erreur au cours de l'éxecution du script (et ce quelle que soit l'erreur) ?

Et encore merci .

samedi 24 mai 2008 à 11:30:12 | Re : Problème de vitesse exécution d'un script

lespinx

Bonjour
... mais y-a-t'il un moyen de supprimer le fichier en cas d'erreur au cours de l'éxecution du script (et ce quelle que soit l'erreur) ?...

Tu peut utilser TRY et EXCEPT pour la gestion des erreurs (voir la doc)
Exemple:

# -*- coding: cp1252 -*-
import os

try:
    monfichier = open("monfichier.txt","w")
    gloupssss   #<=== erreur garantie
    #Suite des instructions du programme
    #...
except:
    print "erreur"
    monfichier.close()
    os.remove("monfichier.txt")
#Si le fichier n'est pas dans le répertoire courant il faut indiquer le chemin complet



Cette discussion est classé dans : fichier, script, problème, variable, texte


Répondre à ce message

Sujets en rapport avec ce message

ajouté une variable x dans Texte[x:1] [ par WaReD ] bonjour  comme l indique mon post je cherche a manipulé une variable Texte avec une variable x exmple: Texte="azerty" x=3 aa = Texte[x:1] aa contiend Problème avec QT Designer [ par rambc ] Bonjour,je viens de faire une petite fenêtre avec QT Designer (sous Windows). Je voudrais utiliser le fichier XML généré par QT Designer. Comme l'inté script python [ par emma66 ] Bonjour, Je recherche un code en python d'une fonction mapList dont le role est de recopier dans la variable Map passée en paramétre les lignes du fic ecrire un dico dans un fichier texte [ par airod ] je cherche depuis un bout de temps mais rien y fait! Mon prob: je pars d'un fichier de config (*.cfg), et j'en crée un dico dans mon appli, ceci me s Problème avec p2app [ par Skanette ] Bonjour,Je suis entrain de réaliser un script appliquant la methode du box counting à différent fractales, le script marche parfaitement et utilise le bibliotheques pour Python [ par helios2 ] Chers " Pythonneurs " , bonjour Quelqu'un sait- il quelles sont les bibliotheques standard à utiliser avec Python pourdevelopper des applications grap Ouvrir un fichier avec un autre programme [ par piche32 ] Bonjour à tous. Je suis débutant en python et je souhaiterais ouvrir un fichier avec google earth depuis un programme en python. J'aimerais savoir qu Débutant, complètement perdu... [ par Mgiv64 ] Bonjour à tous,  J'ai programmé une petite application qui réalise des backup d'un fichier de données (d'une application comptable).Mon programme loca Remplacement d'une chaine de caractère dans un fichier *.txt [ par Boy63 ] Bonjour,J'aimerais savoir comment remplacer une partie précise d'une chaine de caractère par une autre dans un fichier *.txt. Je m'explique un peu plu PyQt sous MacOs [ par thibaultg ] Bonjour,Voilà, je travaille sous PyQt et jusqu'alors j'étais sous une OpenSuse toute configurée pour moi... j'avais recours à la commande suivante lor


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.