Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Quelles sont les fonctions fondamentales du module os à apprendre par coeur ?

+1 vote

Python 2.7

Je ne sais pas pourquoi mais je bloque sur mon cours RealPython (part 1) au chapitre sur le module os.

Je m'accroche et j'aimerais savoir quelles sont les fonctions minimum à savoir du module os plutôt que de me bourrer le crâne à tout mémoriser...

Ma liste actuelle :

  • os.path.join(chemin) : créé un chemin complet depuis ma base "chemin"

  • os.listdir(chemin) : fait un dir (ou ls) dans mypath et en retourne une liste.

  • os.walk(chemin) : retourne un tuple de 3 éléments sur chemin : (dossier actuel de chemin, liste des sous-dossiers de chemin, liste des fichiers de chemin et sous-dossiers de chemin). Ouf...

  • os.rename(anciennom, nouveaunom) : renomme anciennom par nouveaunom

  • os.path.isdir(item) / os.path.isfile(item) : pour savoir si l'item travaillé est un dossier ou un fichier

  • os.path.exists(item) : retourne True si item existe

  • os.remove(item) : supprime item

Pouvez-vous me dire si mes définitions ci-dessus sont correctes ?

Devrais-je en apprendre d'autres que vous considérez comme fondamentales ?

Bon et puis je pige que dalle à glob.glog()... je me casse la tête à lire en anglais sur le sujet en vain.
Si une bonne âme pouvait m'en faire un résumé en français svp...

demandé 26-Fev-2015 par Hoglob (258 points)

1 Réponse

+11 votes
 
Meilleure réponse

À mon sens, apprendre des fonctions par coeur est inutile, pour plusieurs raisons:

  • C'est à force d'utiliser ces fonctions que tu retiendras leur utilité et leur usage.
  • Une recherche google quand tu as besoin "d'un fonction qui fait tel truc" te donne (très) souvent la réponse adéquate.
  • Concernant le module os, il est assez bien découpé et les noms des fonctions coulent de source (listdir qui liste le contenu d'un directory, c'est dingue).
  • Le help de python est qui plus est très bien fait.

Le problème existe si tu as du mal avec l'anglais (ce qui semble être le cas), mais malheureusement, quelqu'un bosse dans l'informatique doit plus que quiconque savoir parler anglais.

Concernant tes fonctions:

  • os.path.join(a, *p) -> retourne une string qui concatène les arguments, ajoutant entre eux le séparateur standard du système ("/" pour linux, "\" pour Windows).
  • os.listdir(path) -> retourne une liste du contenu du directory passé en argument. Peut être un chemin relatif.
  • os.walk(path) -> Parcours récursivement les dossier à partir de path, retourne un générateur, et pour chaque dossier, yield un tuple de la forme: (chemin vers dossier, dossiers contenus dans ce dossier, fichiers contenus dans ce dossier).
  • os.rename(old, new) -> renomme old par new. J'ai plus tendance à utiliser shutil.move, qui a la même syntaxe d'utilisation.
  • os.path.isdir(item) / os.path.isfile(item) -> Retourne un booleen pour savoir si l'item testé est un dossier ou un fichier. On pourra citer os.path.islink(item) voire même os.path.ismount dans la même veine.
  • os.path.exists(item) -> Retourne un booleen pour savoir si l'item existe sur le filesystem. Renvoie False pour des symlinks cassés.
  • os.remove(item) -> Supprime item sur le filesystem. Similaire a os.unlink. Utiliser shutil.rmtree pour supprimer récursivement.

Pour pourra citer os.chdir (équivalent d'un cd), os.stat (avoir des infos sur un item), os.uname (info sur le système), os.path.basename/os.path.dirname (pour avoir uniquement le composant final du chemin/le chemin sans le composant final), etc...

Mais au risque de me repeter, je pense qu'apprendre tout ça par coeur est inutile.

EDIT:
J'ai oublié de parler de glob.
glob.glob(pattern) te permet de trouver les items sur le filesystem qui matchent le pattern, qui peut être composés de wildcards "shell-like" (glob POSIX en fait, man 7 glob, glob.glob ne semble pas accepter les extensions csh).

répondu 26-Fev-2015 par Arza (726 points)
sélectionné 26-Fev-2015 par Hoglob

Ok je comprends mieux maintenant que mon problème vient de ma méthodologie.

J'ai commencé à apprendre Python avec LPTHW qui encourage de se créer des flashcards (j'utilise Anki tous les jours pour ça) afin de mémoriser les concepts de base.
Ca m'a bien aidé au début et j'ai continué.

Mais je touche au burnout là en voulant me bourrer le crâne à chaque nouvelle fonctions dans mes leçons. Je suis quasiment bilingue, mais j'avoue avoir du mal quand c'est technique... la doc officielle de Python par exemple je la trouve difficile à digérer alors que l'anglais employé est basique.

Bref, je pense que je suis en transition de débutant total à débutant-intermédiaire paumé, et qu'il me faut une nouvelle méthodologie pour continuer sainement ma pratique.

Je prends tout conseil ! Merci !

Je trouve qu'au contraire, la doc de python est l'une des plus claires du marché (la doc ruby, on en parle ?).

Je pense que si tu veux t'améliorer, tu peux procéder comme ça:
1. Essayer de connaitre tous les sucres syntaxiques et mécanismes plus avancés, juste savoir qu'ils existent.
2. Ensuite, dans un de tes projets, essayer de réfléchir à comment tu pourrais te servir d'une des notions pour que ça te soit profitable (au choix: context managers, décorateurs, metaclasses). Ne pas en utiliser juste pour dire "Je l'ai fait", mais plutôt savoir si à un moment, ça peut pas te faciliter la vie.
3. Répéter l'étape 2 jusqu'à ce que ça devienne un réflexe pour la notion (je pense aux décorateurs, à force de les utiliser, à un moment ça va être l'évidence même d'en utiliser).
4. Choisir une autre notion.

Typiquement, les métaclasses, au début peu de gens voient l’intérêt directement. Et puis à force de se dire "Et là, ça pourrait servir ? Ça me facilite le job ?", tu vas tomber sur le cas de figure où tu SAIS que tu en as besoin (Un exemple qui me vient en tête, une métaclasse pour holder de descriptors, pour pas avoir à spécifier un label, parce que les labels c'est moche et pas "safe").

My 2 cents.

Il serait peut-être temps en effet que je me mette à avoir des projets perso pour avancer.
Merci pour les conseils, j'ai déjà beaucoup appris (sucres syntaxique ! j'avais jamais vu ça ! lol)

...