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

Réseau/Web Python Discussion :

Associer un type MIME à une extension.


Sujet :

Réseau/Web Python

  1. #1
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut Associer un type MIME à une extension.
    Salut à tous,
    j'ai un petit soucis au niveau du module glob et des expressions régulières, je n'arrive pas à faire ce que je veux.

    Je souhaite récupérer tous les *.gif et *.jpg du dossier courant, pour *.jpg seul j'y arrive, mais je ne vois pas comment utiliser le module "re" pour les expressions régulières pour faire un truc de ce style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for ifile in glob.glob("*.(jpg|gif)"):
    Ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for ifile in glob.glob("*.jpg"):
    Ensuite, je souhaite retailler les images et sauver sous un autre nom les miniatures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image.save("little_" + ifile, "JPEG")
    Donc, idem il faudrait faire "(JPEG|GIF)" en fonction du format d'origine et là aussi je calle un peu :s

    J'utilise le module "glob" et le module "Image" de la librairie PIL
    J'ai importé aussi le module "re".

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Points : 114
    Points
    114
    Par défaut
    *.(jpeg|gif) n'est pas un masque valide pour cette fonction.
    fnmatch & glob ne gèrent pas les "ou" je crois.

    Tout simplement, tu peux obtenir ce résultat en ajoutant les tableaux: glob.glob('*.gif')+glob.glob('*.jpg')+glob.glob('*.jpeg')

  3. #3
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Ahh woké, je vais tester ça alors.
    Et pour la sauvegarde, je peux faire pareil ?? ça me parait assez étrange :s

  4. #4
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Finalement, j'ai fait autrement, j'ai fait une boucle sur une liste d'extension.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def imageList(self, extension):
            imgList = []
            for ext in extension:
                for ifile in glob.glob(self.path + "*." + ext):
                    imgList.append(ifile)
            return imgList
    Ca me crée la liste des fichiers du repertoire self.path (définit plus haut dans la class) ayant pour extension l'une des extensions contenue dans ma liste donnée en paramètre. Ici en l'occurrence ['jpg', 'gif']

    Par contre, pour ma fonction de retaillage, ça merdouille, mais avant l'histoire du format de sauvegarde :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        def retailList(self, size=(100,100)):
            xSize = size[0]
            ySize = size[1]
            for ifile in self.imgList:
                image = Image.open(ifile)
                image.thumbnail((xSize, ySize), Image.ANTIALIAS)
                if ifile[0:7] != "little_":
                    image.save("little_" + ifile, self.extension)
    le self.imgList n'est pas compris :s
    Je vais mettre l'ensemble de ma class pour mieux y voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    import glob
    import Image
     
    class ManageImages:
        "Classe de gestion d'images, listage, retaillage, renommage, etc"
        def __init__(self, path=''):
            self.path = path
     
        def imageList(self, extension):
            "Création de la liste des fichiers avec les extensions qui vont bien"
            imgList = []
            for ext in extension:
                for ifile in glob.glob(self.path + "*." + ext):
                    imgList.append(ifile)
            return imgList
     
        def retailList(self, size=(100,100)):
            "On retaille les images au format par défaut ou au format demandé"
            xSize = size[0]
            ySize = size[1]
            for ifile in self.imgList:
                image = Image.open(ifile)
                image.thumbnail((xSize, ySize), Image.ANTIALIAS)
                if ifile[0:7] != "little_":
                    image.save("little_" + ifile, self.extension)
     
    # images = ManageImages('path/to/folder/')
    images = ManageImages()
    images.imageList(['jpg','gif'])
    images.retailList((80,80))
    Et l'erreur c'est :
    AttributeError: ManageImages instance has no attribute 'imgList'

  5. #5
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Bon, j'ai remanié un peu le tout, j'avance j'avance ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    import glob
    import Image
     
    class ManageImages:
        "Classe de gestion d'images, listage, retaillage, renommage, etc"
        def __init__(self, pathTo='thumbs/', path='', extension=['jpg','gif']):
            "Initialise la liste et les paramètres"
            self.path = path
            self.pathTo = pathTo
            self.extToMIME = {'JPEG': ['jpeg','jpg'], 'GIF': ['gif']}
            self.extension = extension
            self.imgList = self.imageList()
     
        def imageList(self):
            "Création de la liste des fichiers avec les extensions qui vont bien"
            imgList = []
            for ext in self.extension:
                for ifile in glob.glob(self.path + "*." + ext):
                    imgList.append(ifile)
            return imgList
     
        def retailList(self, size=(100,100)):
            "On retaille les images au format par défaut ou au format demandé"
            xSize = size[0]
            ySize = size[1]
            for ifile in self.imgList:
                image = Image.open(ifile)
                image.thumbnail((xSize, ySize), Image.ANTIALIAS)
                image.save(self.pathTo + ifile, "GIF")
     
    images = ManageImages(extension=['gif'])
    images.retailList((90,90))
    Au niveau de la gestion Extension/Type MIME pour la sauvegarde (c'est le problème initial de mon sujet en fait ^^), l'utilisation d'un dictionnaire associant un type mime à une liste d'extensions vous parait correct ?

    ps : la class est loin d'être complète, il y des trucs qui marchent pas tout à fait et d'autres qui ne sont pas du tout fait , il manque aussi quelques tests sur l'existence des fichiers, des thumbs, du préfixage du nom de chaque thumb etc... Enfin vous imagniez bien ^^

  6. #6
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Peut être y a t il plus simple :
    Est il possible de récupérer le type MIME d'un fichier via une fonction d'une librairie ou d'un module ??

  7. #7
    Membre habitué
    Avatar de Olivier_
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Bon, je continu mon monologue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                mimeType = guess_type(ifile)[0]
                mimeType = mimeType[mimeType.index('/')+1:]
    Avec ça, je récupère le sous type.
    guess_type(filename) renvoi un truc du style ('type/subType', none) (j'ai toujours none, je sais pas pourquoi, c'est pas super précis la doc, c'est même très succins ), donc, je fait [0] pour récupérer le couple type/subType, et ensuite je récupère ce qu'il y a après le "/" pour avoir ce que je veux.
    Et la sauvegarde du fichier fonctionne impec.

    Bon, bah j'ai résolu tout seul ^^ ça aura pris du temps...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/12/2006, 12h46
  2. [Inno setup/VB6]Association d'une extension à un logiciel
    Par marsup54 dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 27/09/2006, 10h09
  3. Réponses: 5
    Dernier message: 11/09/2006, 18h29
  4. [windows]associer une extension à un exécutable ..
    Par peppena dans le forum Windows
    Réponses: 2
    Dernier message: 01/06/2004, 19h25

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