IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Conseils archives zip et gestion de dates


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut Conseils archives zip et gestion de dates
    Bonjour,

    Débutant en python j'aimerai avoir des conseils sur la meilleur implémentation à utiliser pour la lecture du contenu d'une archive .zip (un fichier de log en fait) sans pour autant "dezipper" celui-ci comme le ferai un zcat en script.(pour info les fichiers font plusieurs centaines de mégas)

    Autre question, existe t'il des fonctions de bases pour la gestion des dates, l'idée ici c'est de récupérer dans un répertoire les noms de fichiers "zippes" correspondant à une saisie clavier par exemple une date de début de recherche et une durée de recherche type 3 jours à partir de la date /une semaine / deux semaine / un mois etc /etc..
    sachant qu'il y a un fichier par jours..

    Merci par avance pour vos conseils

    Cordialement,
    François

  2. #2
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Salut,

    pour des fichiers décompréssés > 100 Mo, l'idéal serait d'éviter de tout décompresser en mémoire (même la mémoire peut avoir ses limites). Le mieux serait (tout dépend de ce que tu veux faire avec ces fichiers) de ne scanner le zip que pour extraire la table de structure des fichiers/répertoires.
    Cependant, je ne sais pas si c'est faisable directement avec zipfile.

    Pour les dates, c'est plus simple, le module 'date' permet de faire beaucoup de chose.

    Enfin, si tu dois décompresser tes logs dans des zips juste pour extraire des noms & dates de fichiers, le mieux serait de créer, en même temps que tes logs, une BdD d'index contenant ces informations là.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut
    Bonjour,

    En faite l'idée c'est de récupérer des informations contenues dans ces logs qui sont compressées en .zip (tailles 100 Mo en moyenne compressées)
    le module zipfile semble ne pas correspondre (fichiers trop gros).. pour le moment je "dezip" l'archive mais cela est très très long, je désirerai trouver un équivalent à la commande zcat pour récuperer le fichier ligne par ligne analyser sans devoir le decompresser, pour le moment je test avec un os.popen mais ça fonctionne pas....
    Si vous avez une idée et surtout une bonne méthode... merci par avance

    François

  5. #5
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Bonjour,

    Est-ce que tu as essayé la méthode infolist() de ZipFile ?

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import zipfile
     
    z = zipfile.ZipFile('log.zip', 'r')
    l = z.infolist()
    for i in l:
        print i.filename

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut
    Bonjour,

    Oui j'ai essayé cette méthode mais sans résultat, je cherche un truc du style :

    zcat=os.popen ("zcat "+fichier+"|grep "+user_id,"r")

    L'idée c'est de récupérer le résultat de la commande unix faute de mieux mais ça marche pas...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut
    Bonjour,
    J'ai essayé également avec cette méthode :


    (sout,serr) = subprocess.Popen(['zcat test.zip'],stdout=subprocess.PIPE).communicate()
    for line in sout.split('\n'):
    print line

    et j'ai le résultat suivant :


    Traceback (most recent call last):
    File "sub.py", line 28, in ?
    Traitement()
    File "sub.py", line 13, in Traitement
    (sout,serr) = subprocess.Popen(['zcat -c test.zip'],stdout=subprocess.PIPE).communicate()
    File "c:\Python24\lib\subprocess.py", line 542, in __init__
    errread, errwrite)
    File "c:\Python24\lib\subprocess.py", line 706, in _execute_child
    startupinfo)
    WindowsError: [Errno 2] Le fichier spÚcifiÚ est introuvable

    par contre quand je remplace le zcat par un ls sans paramètre ... no problemo

    Une idée ..?

    Merci par avance

  8. #8
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Surement que la commande zcat n'est pas trouvée. Donc replacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (sout,serr) = subprocess.Popen(['zcat test.zip'],stdout=subprocess.PIPE).communicate()
    for line in sout.split('\n'):
    print line
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (sout,serr) = subprocess.Popen(['zcat test.zip'],stdout=subprocess.PIPE,env={'PATH':'/usr/bin'}).communicate()
    for line in sout.split('\n'):
    print line
    Ou '/usr/bin' est à remplacer par le chemin ou se trouve zcat.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut
    Bonjour, merci pour ton aide,

    Avec ce code j'ai l'erreur indiquée en pièce jointe
    quand je remplace la commande zcat par un ls ça fonctionne... pour info l'exécution du script se fait sous cygwin.

    print liste_files_eaccess[1]
    (sout,serr) = subprocess.Popen(['zcat','test.zip'],stdout=subprocess.PIPE,env={'PATH':'/usr/bin'}).communicate()
    for line in sout.split('\n'):

    Si tu as une idée ?
    Merci par avance
    Images attachées Images attachées  

  10. #10
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Déjà dit :

    Citation Envoyé par mchk0123
    Ou '/usr/bin' est à remplacer par le chemin ou se trouve zcat.
    Si tu est sur Windows (cygwin) au lieu d'Unix, tu devrais pouvoir trouver exactement où est installé le programme 'zcat.exe'.

  11. #11
    Membre éclairé Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut Interrogation
    Bonjour,

    En lisant les posts, j'ai quelques petites interrogations. Il est dit que le module zipfile n'est pas le mieux parce que les fichiers sont trop gros. Mais, zcat ne fait-il pas la même chose ? Il décompresse puis renvoie le contenu dans le stdout. De plus, cygwin n'est pas réputé pour sa rapidité et je trouve qu'appeler des commandes système n'est jamais très souple et souvent source de problèmes. Maintenant, si c'est juste un besoin très ponctuel, je comprends.

    Est-ce que tu fais la comparaison entre l'appel à zcat et l'utilisation de zipfile ?

  12. #12
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Deux choses l'une :

    - soit zcat décompresse exactement le même contenu que zipfile, mais dans ce cas, zcat permet au moins d'avoir un flux continu de listes de fichiers *pendant* la décompression (mais pour cela il faut créer un thread à part)
    - soit zcat est assez intelligent pour parcourir le fichier zip sans le décompresser.

    En effet les archives zips contiennent des entrées de "répertoires" qui sont en clair et mélangés aux blocs des données compressés. Et même si c'est assez lent de parcourir sur disque tout le fichier pour localiser ces entrées, au moins le % de CPU utilisé avoisine 0% dans ce cas.

    Donc petit conseil :
    - essayer zipfile, et si ce n'est pas assez efficace, alors
    - essayer zcat, et si ce n'est pas assez efficace, il faudra envisager une autre solution

Discussions similaires

  1. [Macro] Gestion des dates / conseil
    Par madvic dans le forum Contribuez
    Réponses: 7
    Dernier message: 11/12/2014, 11h46
  2. Gestion archive zip: [erro13] Permission Denied (windows8)
    Par lezardbleu dans le forum Général Python
    Réponses: 18
    Dernier message: 12/07/2013, 12h54
  3. [MCD] Gestion de date
    Par Seb7 dans le forum Schéma
    Réponses: 13
    Dernier message: 08/09/2003, 09h29
  4. [MCD] [MCD] Gestion des dates
    Par brionne dans le forum Schéma
    Réponses: 3
    Dernier message: 30/05/2003, 13h01
  5. [BEST_PRACTICE][Merise] MCD & gestion de date
    Par Seb7 dans le forum Schéma
    Réponses: 4
    Dernier message: 16/04/2003, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo