Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/08/2010, à 10:43

wido

[Python][résolu] Liste de données et récupération de valeurs

Bonjour,
je débute sous python avec le livre "Apprendre à programmer avec python3"
je tente de convertir mes scripts écrits en bash, mais voilà j'ai un fichier de données qui se présente ainsi:

/media/HDD120/Wallpaper/images/823/82383.jpg = 1680 1050 a02dc28caa9145dfe9100e57419cf825
/media/HDD120/Wallpaper/images/357/1366-768-35703.jpg = 1366 768 363d1b97e789bd67dfd40cef03c6ac55
/media/HDD120/Wallpaper/images/117/thumbbig-11770.jpg = 700 525 26afdd844d91c1ec44eaadb7078bfd63
/media/HDD120/Wallpaper/712/1440-900-71261.jpg = 1440 900 a696e9d07dd8dca7b62807295d7ff45e
/media/HDD120/Wallpaper/images/130/100-100-13063.jpg = 100 100 04348b63b43988fd6a92121119fb8d50
/media/HDD120/Wallpaper/images/358/1400-1050-35892.jpg = 1400 1050 f23291421b68b5ea351ea98b565d8a2d
/media/HDD120/Wallpaper/images/810/1280-800-8101.jpg = 1280 800 45acefa2d6c4b66ad31c95cc50ef6e15
/media/HDD120/Wallpaper/images/264/thumb-26454.jpg = 300 225 594906fc979490b89212659942d2bfce
/media/HDD120/Wallpaper/images/194/19474.jpg = 1330 700 2688f09217aae3caaa8a7c8086069d4a
/media/HDD120/Wallpaper/images/242/1280-1024-24252.jpg = 1280 1024 b9e1182c99146a98b40f5b5f76e9ea5c
/media/HDD120/Wallpaper/images/112/1024-768-11232.jpg = 1024 768 68c90348f521d7edb871056fb45099f9
/media/HDD120/Wallpaper/images/thumb-1275702065547.jpg = 300 168 a51c577b95f4261ce6c6733bfc64f56e
/media/HDD120/Wallpaper/images/148/thumbbig-14851.jpg = 700 560 deb56eb4bc1f2baf249d6536384c9284
/media/HDD120/Wallpaper/images/Video Game/Video-Game-Earthbound-11314.jpg = 1280 1024 2669bc3aed4fbc7a8ec9a807b3d98c78
/media/HDD120/Wallpaper/images/184/thumb-18428.jpg = 300 225 792eaa942bed2a59dfb27dd77cdc4b64
/media/HDD120/Wallpaper/images/464/1440-900-46486.jpg = 1440 900 92af1a63797311f26217bd92a1e1efba
/media/HDD120/Wallpaper/images/321/thumb-32112.jpg = 300 225 4634b29139a06637d3dc5d3a12d3454a
/media/HDD120/Wallpaper/images/Sci Fi/Sci-Fi-Vehicle-9663.jpg = 1280 720 63328beee9426523939f891c43dd6684
/media/HDD120/Wallpaper/images/180/18066.jpg = 1950 1230 270cddad5f27da3af419fc346cebaed1
/media/HDD120/Wallpaper/images/433/1280-800-43350.jpg = 1280 800 17ff8818c41e7a7193e59529bd65e208

le but de ce sujet est de récupérer 4 données séparement:
-le chemin (/media/HDD120/Wallpaper/images/823/82383.jpg)
-la largeur de l'image (1680)
-la longueur de l'image (1050)
et sa valeur md5sum (a02dc28caa9145dfe9100e57419cf825)

avec ces 4 données ça me permettra d'afficher une image au dimension de mon écran, et d'éliminer les doublons en cas d'analyse du fichier de données.

sachant que le nom du fichier peut contenir des espaces, que le fichier de données fait plus de 200000 lignes. Je ne sais pas encore comme procéder quelle fonction dois je utiliser?

Dernière modification par wido (Le 02/08/2010, à 11:26)

Hors ligne

#2 Le 02/08/2010, à 11:00

jde3

Re : [Python][résolu] Liste de données et récupération de valeurs

Salut,

S'il n'y avait pas eu d'espace dans tes noms de fichiers, je t'aurais dit de faire du split, mais là c'est juste un peu plus sioux, du coup, je te conseille de te plonger dans le monde merveilleux des expressions régulières : http://docs.python.org/library/re.html

Hors ligne

#3 Le 02/08/2010, à 11:11

wido

Re : [Python][résolu] Liste de données et récupération de valeurs

j'ai commencé par ça:

message = '/media/HDD120/Wallpaper/images/823/82383.jpg = 1680 1050 a02dc28caa9145dfe9100e57419cf825'
print("nom du fichier =", message.split(' = ')[0])
print("reste à faire =", message.split(' = ')[1])

ça donne:

>>> 
nom du fichier = /media/HDD120/Wallpaper/wall.alphacoders.com/images/823/82383.jpg
reste à faire = 1680 1050 a02dc28caa9145dfe9100e57419cf825

Dernière modification par wido (Le 02/08/2010, à 11:11)

Hors ligne

#4 Le 02/08/2010, à 11:11

roynux

Re : [Python][résolu] Liste de données et récupération de valeurs

ligne = "/media/HDD120/Wallpaper/images/823/82383.jpg = 1680 1050 a02dc28caa9145dfe9100e57419cf825"
(nomfichier, infos) = ligne.split(" = ")
(largeur, hauteur, md5) = infos.split()

Évidemment, ça va planter si une ligne n'a pas le bon format, mais ça devrait faire l'affaire.

Hors ligne

#5 Le 02/08/2010, à 11:16

roynux

Re : [Python][résolu] Liste de données et récupération de valeurs

print " ".join("a b c = d e.jpg = 1680 1050 a02dc28caa9145dfe9100e57419cf825".split()[:-4])
print "a b c = d e.jpg = 1680 1050 a02dc28caa9145dfe9100e57419cf825".split()[-3:]

Hors ligne

#6 Le 02/08/2010, à 11:17

AnsuzPeorth

Re : [Python][résolu] Liste de données et récupération de valeurs

Bjr,
Il est possible d'utiliser split, il suffit de se servir du délimiteur = pour récup le nom du fichier, et de récup depuis la fin pour le reste.

var = '/media/HDD120/Wallpaper/images/433/1280-800-43350.jpg = 1280 800 17ff8818c41e7a7193e59529bd65e208'
nom = var.split(' = ')[0]
largeur, hauteur, md5 = var.split(' ')[-3:]

Il est possible de faire autrement, comme tjrs wink


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#7 Le 02/08/2010, à 11:21

valAa

Re : [Python][résolu] Liste de données et récupération de valeurs

Salut,

Même si le nom de fichier contient des espaces, un split sur les caractères ' = '  (espace égal espace) te donnera d'un côté le chemin, de l'autre une chaîne contenant tes autres infos.
Cette chaîne restante peut alors être splittée sur le caractère ' ' (espace) pour isoler les largeurs, longueurs et md5sum.

Sinon il est clair que les regexp (expression régulières) peuvent t'aider également, seulement je me garderais bien d'intervenir là dessus étant une bouse en regexps sad

edit : trop tard, ça m'apprendra à rédiger une réponse en faisant autre chose tongue

Dernière modification par valAa (Le 02/08/2010, à 11:23)

Hors ligne

#8 Le 02/08/2010, à 11:25

wido

Re : [Python][résolu] Liste de données et récupération de valeurs

Je prends la dernier solution, je me base exclusivement sur le = ce sera plus facile pour la suite.

petite question sur le [-3:] ça prend les trois termes à partir de la fin?

Merci à vous, j'ai hâte d'en apprendre plus sur python. smile

Dernière modification par wido (Le 02/08/2010, à 11:27)

Hors ligne

#9 Le 02/08/2010, à 11:41

valAa

Re : [Python][résolu] Liste de données et récupération de valeurs

wido a écrit :

petite question sur le [-3:] ça prend les trois termes à partir de la fin?

Presque : ça prend les termes du 3è en partant de la fin, jusqu'à la fin.
En python, on peut parcourir une liste depuis sa fin en utilisant le signe moins :
liste[-1] donne le dernier terme par exemple.
donc liste[-3:] désigne tous les termes entre le "-3ème" inclus (3è en partant de la fin) et la fin de la liste

Dernière modification par valAa (Le 02/08/2010, à 11:42)

Hors ligne