Bonjour à tous !
Je vous propose un nouveau challenge pour débutants ou passionnés.
Contexte et objectif
Vous êtes un développeur informatique d'une grande entreprise. Le patron souhaite une application en Python (version 2.7.* ou 3.*) pour compiler une arborescence (Chemin d'accès, contenu des fichiers). Vous placerez le résultat dans un fichier texte.
Astuce
Sachant qu'il existe des fichiers binaires, il est préférable de compresser tout les fichiers en base64. Et peut-être même les sous-répertoires de manière imbriquée.
Exemple : (b64 = base64)
Pour les notations et les délimiteurs, je vous laisse le soin de trouver ceux les plus appropriés.
Je vous propose de lire une petite documentation. Ça servira de cours pour les débutant et de rappel pour les amateurs.
Documentation
Délimiteur : il s'agit d'un caractère peux utilisé qui permettra de délimiter différent champs. Exemple "1:2:3:4:5", le délimiteur ici est ":".
Compiler : c'est une action informatique qui a pour objectif de rassembler une quantité d'information dans un seul ensemble non imbriqué.
Il existe une seconde définition en programmation : action d'un compilateur pour transformer un code source en application exécutable. (C,C+,C++,C#,ASM en fichier binaire)
Imbrication : ensemble de données qui s'articule autour d'une arborescence, rangé et ordonné.
Encodage / décodage en base64
Qu'est-ce que base64 ? (Lisez ces lignes attentivement)
Base64 n'est pas un système de compression.
Il permet de stocker des bits [0-255] sous un format lisible :
ABCDEFGHIJKLMNOPQRTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
Dans ce challenge, base64 permettra à la fois de stocker en mémoire des fichiers binaires et d'utiliser un délimiteur pour toutes les informations nécessaires : nom!type!contenu:nom!type!contenu:nom!type!contenu [...]
Nom : Nom du fichier ou du dossier
Type : Fichier ou Dossier (0/1)
Contenu : La donnée du fichier ou du dossier en base64
Entraînez vous d'abord à encoder en base64 pour comprendre le fonctionnement.
Bonus !
Lire un fichier en mode binaire
Écrire dans un fichier texte
Vérifier l'existence d'un répertoire ou d'un fichier
Lister les dossiers et fichiers
Fonction split
La fonction split permet de créer des tableaux à partir d'une chaîne et d'un délimiteur.
Exemple :
Boucles
Vous aurez probablement besoin des boucles
Voici le même exemple avec la boucle While et For : l'algorithme lit ligne par ligne un fichier texte.
Boucle while
Boucle for
Je pense avoir fait le tour des commandes essentielles.
N'oubliez pas de vous aider d'internet ! La réponse ne s'y trouve pas, ouf !
Et si vous avez des questions, relisez une nouvelle fois le sujet avant de poster.
Je ne veux pas d'étourdie. L'objectif est de créer un logiciel qui compile une arborescence de répertoires et de fichiers.
Note : Les réponses peuvent être envoyés par MP. Avec le titre "Challenge".
Pour faire plaisir à fred :
Une indentation de 4 espaces est obligatoire, voir la PEP8 si vous ne comprenez pas pourquoi...
Ne dépassez pas 80 caractères sur 1 ligne de code, idem voir PEP8
Fred m'a indiqué un autre système algorithmique, n'hésitez pas à l'utiliser :
[13h40] fred: @yarflam dans ton challenge pourquoi split() ?
[13h42] Yarflam: Pour pouvoir rentrer plusieurs fichiers dans un seul ensemble de donnée
[13h42] Yarflam: La partie Astuce explique bien le concept de l'algorithme
[13h43] Yarflam: [fichier1]:[fichier2]
[13h44] Yarflam: "[fichier1]:[fichier2]".split(':')[0] ==> [fichier1]
[13h44] fred: moui j'ai du mal là, base64 va bien écrire/encoder un fichier dans un autre fichier, c'est ça?
[13h45] Yarflam: Non pas tout à fait. Il va suivre l'arborescence pour créer des imbrications de base64.
[13h46] Yarflam: Et le résultat sera sauvegardé dans un fichier texte
[13h46] Yarflam: base64(base64(fichier1:fichier2):base64(fichier1))
[13h47] fred: exemple : encode(file, file_64), possible?
[13h48] Yarflam: Comment tu comprends le fonctionnement ? T'as dernière ligne m'est indifférente.
[13h49] fred: Je partirais du répertoire racine
[13h49] fred: j'encode tous les fichiers
[13h49] fred: je place l'objet fichier encodé dans une liste
[13h50] fred: j'écris tout dans un seul fichier
[13h51] Yarflam: Hum je vois. Mais si y a 10 récursions comment tu t'en sors pour repérer l'arborescence ?
[13h51] fred: os.walk
[13h52] Yarflam: C'est une solution
[13h52] Yarflam: J'avais pas imaginé ça comme ça. Mais oui c'est possible après tout.
[13h52] fred: ok
[13h53] fred: walk parcours récursivement l'arborescence des répertoires
Bonne chance !
Je vous propose un nouveau challenge pour débutants ou passionnés.
Contexte et objectif
Vous êtes un développeur informatique d'une grande entreprise. Le patron souhaite une application en Python (version 2.7.* ou 3.*) pour compiler une arborescence (Chemin d'accès, contenu des fichiers). Vous placerez le résultat dans un fichier texte.
Astuce
Sachant qu'il existe des fichiers binaires, il est préférable de compresser tout les fichiers en base64. Et peut-être même les sous-répertoires de manière imbriquée.
Exemple : (b64 = base64)
Code:
b64( // Répertoire 'Partage' b64( // Répertoire 'Notes' b64(fichier.txt) ) b64( // Répertoire 'Document' b64(apps.exe) b64(img.jpg) ) )
Je vous propose de lire une petite documentation. Ça servira de cours pour les débutant et de rappel pour les amateurs.
Documentation
Délimiteur : il s'agit d'un caractère peux utilisé qui permettra de délimiter différent champs. Exemple "1:2:3:4:5", le délimiteur ici est ":".
Compiler : c'est une action informatique qui a pour objectif de rassembler une quantité d'information dans un seul ensemble non imbriqué.
Il existe une seconde définition en programmation : action d'un compilateur pour transformer un code source en application exécutable. (C,C+,C++,C#,ASM en fichier binaire)
Imbrication : ensemble de données qui s'articule autour d'une arborescence, rangé et ordonné.
Encodage / décodage en base64
Code:
import base64 y=base64.b64encode('hello') print base64.b64decode(y)
Base64 n'est pas un système de compression.
Il permet de stocker des bits [0-255] sous un format lisible :
ABCDEFGHIJKLMNOPQRTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
Dans ce challenge, base64 permettra à la fois de stocker en mémoire des fichiers binaires et d'utiliser un délimiteur pour toutes les informations nécessaires : nom!type!contenu:nom!type!contenu:nom!type!contenu [...]
Nom : Nom du fichier ou du dossier
Type : Fichier ou Dossier (0/1)
Contenu : La donnée du fichier ou du dossier en base64
Entraînez vous d'abord à encoder en base64 pour comprendre le fonctionnement.
Bonus !
Code:
#!/usr/bin/python import base64 bin=open('123.jpg','rb').read() y=base64.b64encode(bin) file=open('out.jpg','wb') file.write(base64.b64decode(y)) file.close()
Code:
file=open('monfichier.exe','rb')
Code:
file=open('sortie.txt','w') file.write("J'ecris dans mon fichier") file.close()
Code:
import os if os.path.isfile('doc.txt'): print 'Le fichier existe !' if os.path.isdir('bin'): print 'Le dossier existe !'
Code:
import os ls=os.listdir('bin')
La fonction split permet de créer des tableaux à partir d'une chaîne et d'un délimiteur.
Exemple :
Code:
chaine="1:2:3:4:5" chaine=chaine.split(':') print chaine[2] # Affiche '3'
Vous aurez probablement besoin des boucles
Voici le même exemple avec la boucle While et For : l'algorithme lit ligne par ligne un fichier texte.
Boucle while
Code:
file=open('fichier.txt','rb').read().split('\n') i=0 while i < len(file): print file[i] i=i+1
Code:
file=open('fichier.txt','rb').read().split('\n') for line in file: print line
Je pense avoir fait le tour des commandes essentielles.
N'oubliez pas de vous aider d'internet ! La réponse ne s'y trouve pas, ouf !
Et si vous avez des questions, relisez une nouvelle fois le sujet avant de poster.
Je ne veux pas d'étourdie. L'objectif est de créer un logiciel qui compile une arborescence de répertoires et de fichiers.
Note : Les réponses peuvent être envoyés par MP. Avec le titre "Challenge".
Pour faire plaisir à fred :
Une indentation de 4 espaces est obligatoire, voir la PEP8 si vous ne comprenez pas pourquoi...
Ne dépassez pas 80 caractères sur 1 ligne de code, idem voir PEP8
Fred m'a indiqué un autre système algorithmique, n'hésitez pas à l'utiliser :
[13h40] fred: @yarflam dans ton challenge pourquoi split() ?
[13h42] Yarflam: Pour pouvoir rentrer plusieurs fichiers dans un seul ensemble de donnée
[13h42] Yarflam: La partie Astuce explique bien le concept de l'algorithme
[13h43] Yarflam: [fichier1]:[fichier2]
[13h44] Yarflam: "[fichier1]:[fichier2]".split(':')[0] ==> [fichier1]
[13h44] fred: moui j'ai du mal là, base64 va bien écrire/encoder un fichier dans un autre fichier, c'est ça?
[13h45] Yarflam: Non pas tout à fait. Il va suivre l'arborescence pour créer des imbrications de base64.
[13h46] Yarflam: Et le résultat sera sauvegardé dans un fichier texte
[13h46] Yarflam: base64(base64(fichier1:fichier2):base64(fichier1))
[13h47] fred: exemple : encode(file, file_64), possible?
[13h48] Yarflam: Comment tu comprends le fonctionnement ? T'as dernière ligne m'est indifférente.
[13h49] fred: Je partirais du répertoire racine
[13h49] fred: j'encode tous les fichiers
[13h49] fred: je place l'objet fichier encodé dans une liste
[13h50] fred: j'écris tout dans un seul fichier
[13h51] Yarflam: Hum je vois. Mais si y a 10 récursions comment tu t'en sors pour repérer l'arborescence ?
[13h51] fred: os.walk
[13h52] Yarflam: C'est une solution
[13h52] Yarflam: J'avais pas imaginé ça comme ça. Mais oui c'est possible après tout.
[13h52] fred: ok
[13h53] fred: walk parcours récursivement l'arborescence des répertoires
Bonne chance !