Python os — Les-mathematiques.net The most powerful custom community solution in the world

Python os

Bonjour à tous,

J'ai télécharger un fichier zip sur Kaggle qui s'appelle 'dogs-vs-cats' puis j'ai extrait le contenu, il y avait deux fichiers zip et un fichier csv. J'ai extait le deux fichiers zip dans les dossiers train et test toujours à l'intérieur du dossier ''C:\Users\user\.keras\datasets\dogs-vs-cats" (j'ai mis user à la place de mon pseudo pour le forum mais dans le code j'ai le bon chemin bref :)o ).

Justement le code suivant : tiré du livre de Chollet : Chollet
# The path to the directory where the original
# dataset was uncompressed
original_dataset_dir = r'C:\Users\user\.keras\datasets\dogs-vs-cats'

# The directory where we will
# store our smaller dataset
base_dir = r"C:\Users\user\.keras\datasets\dogs-vs-cats\small"
os.mkdir(base_dir)

# Directories for our training,
# validation and test splits
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)

# Directory with our training cat pictures
train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)

# Directory with our training dog pictures
train_dogs_dir = os.path.join(train_dir, 'dogs')
os.mkdir(train_dogs_dir)

# Directory with our validation cat pictures
validation_cats_dir = os.path.join(validation_dir, 'cats')
os.mkdir(validation_cats_dir)

# Directory with our validation dog pictures
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
os.mkdir(validation_dogs_dir)

# Directory with our validation cat pictures
test_cats_dir = os.path.join(test_dir, 'cats')
os.mkdir(test_cats_dir)

# Directory with our validation dog pictures
test_dogs_dir = os.path.join(test_dir, 'dogs')
os.mkdir(test_dogs_dir)

# Copy first 1000 cat images to train_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(train_cats_dir, fname)
    shutil.copyfile(src, dst)

# Copy next 500 cat images to validation_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1000, 1500)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(validation_cats_dir, fname)
    shutil.copyfile(src, dst)
    
# Copy next 500 cat images to test_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1500, 2000)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(test_cats_dir, fname)
    shutil.copyfile(src, dst)
    
# Copy first 1000 dog images to train_dogs_dir
fnames = ['dog.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(train_dogs_dir, fname)
    shutil.copyfile(src, dst)
    
# Copy next 500 dog images to validation_dogs_dir
fnames = ['dog.{}.jpg'.format(i) for i in range(1000, 1500)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(validation_dogs_dir, fname)
    shutil.copyfile(src, dst)
    
# Copy next 500 dog images to test_dogs_dir
fnames = ['dog.{}.jpg'.format(i) for i in range(1500, 2000)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(test_dogs_dir, fname)
    shutil.copyfile(src, dst)



L'erreur se situe ici :
---> 48     shutil.copyfile(src, dst)

Il est dit que
Erreur a écrit:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\user\\.keras\\datasets\\dogs-vs-cats/cat.0.jpg'

La photo cat.0 est bien disponible dans le fichier train. Après peut être qu'il n'y ait pas allé. Je suis en train de découvrir la librairie os qui permet d'interagir avec le système d'exploitation.
Par exemple mkdir c'est pour créer un dossier, je ne le vois pas quand j'exécute le code mais c'est pas grave.

Réponses

  • Pour accéder au fichier train si je comprends bien là

    os.path.join(base_dir, 'train')
    

    Il a crée un chemin, une adresse.
  • C:\\Users\\user\\.keras\\datasets\\dogs-vs-cats[large]/[/large]cat.0.jpg

    Il devrait y avoir \\ à la place...
  • C'est le message de jupyter donc je vois pas quoi dire
  • Ton windows considère dogs-vs-cats/cat.0.jpg comme un nom de fichier puisque c'est \ qui est utilisé sous windows.

    Le / c'est le séparateur sous unix, os.path.join devrait mettre \\ à la place...
  • Ah le problème vient que je suis sur windows alors. Bon ben je peux rien faire.
  • Du coup je vais essayer de trouver un tuto sur internet qui m'emmène au même point mais avec windows afin de pouvoir finir le tuto du livre de Chollet.
  • C'est os.path.join qui ne fait pas le job correctement.
  • Ah je vois je peux solve résoudre mon problème en trouvant un substitut.
  • os.path.join c'est juste un concaténateur de chemin n'est-ce pas ? Par exemple : os.path.join('/myDir/myDir2', 'myDir3/', 'myFile') : renvoie '/myDir/myDir2/myDir3/myFile' (sans vérifier si le path existe).

    Si j'ai bien compris les chemins sur windows s'écrivent avec des \\ à la place de \ ? Non c'est faux je viens de regarder mon ficher le chemin est : "C:\Users\blabla\.keras\datasets\dogs-vs-cats"
  • Sous windows c'est \ et sous unix /, je ne sais pas pourquoi l'erreur est donné avec \\
    C:\\Users\\user\\.keras\\datasets\\dogs-vs-cats/cat.0.jpg

    mais os.path.join devrait renvoyer un chemin cohérent avec le système et l'erreur est un mix des deux... j'ignore pourquoi.
  • Justement je travaille dessus et il me dit
    [Errno 2] No such file or directory: 'C:\\Users\\user\\.keras\\datasets\\dogs-vs-cats\\train\\cat.0.jpg'
    
    Donc cela ne provient peut-être pas du "\", je peux vous montrer le code :
    # plot dog photos from the dogs vs cats dataset
    from matplotlib import pyplot
    from matplotlib.image import imread
    # define location of dataset
    folder = r"C:\Users\user\.keras\datasets\dogs-vs-cats\train"
    # plot first few images
    for i in range(9):
      # define subplot
      pyplot.subplot(330 + 1 + i)
      # define filename
      filename = folder + '\cat.' + str(i) + '.jpg'
      # load image pixels
      image = imread(filename)
      # plot raw pixel data
      pyplot.imshow(image)
      # show the figure
      pyplot.show()
    
  • peut-être qu'au lieu d'écrire
    filename = folder + '\cat.' + str(i) + '.jpg'
    

    tu devrais écrire
    filename = folder + r"\cat." + str(i) + '.jpg'
    
  • J'avoue mais là non plus ca ne donne rien.
    [Errno 2] No such file or directory: 'C:\\Users\\ceche\\.keras\\datasets\\dogs-vs-cats\\train\\cat.0.jpg'
    
    C'est bizarre cette affaire, je ne m'attendais pas à ça quand j'ai ouvert mon livre de deep learning.
  • Essaie ça :
    # plot dog photos from the dogs vs cats dataset
    from matplotlib import pyplot
    from matplotlib.image import imread
    # define location of dataset
    folder = "C:/Users/ceche/.keras/datasets/dogs-vs-cats/train"
    # plot first few images
    for i in range(9):
      # define subplot
      pyplot.subplot(330 + 1 + i)
      # define filename
      filename = folder + "/cat." + str(i) + ".jpg"
      # load image pixels
      image = imread(filename)
      # plot raw pixel data
      pyplot.imshow(image)
      # show the figure
      pyplot.show()
    
  • J'ai essayé un truc
    folder = r"C:\Users\ceche\.keras\datasets\dogs-vs-cats\train"
    os.listdir(folder)
    

    J'ai eu
    ['train', 'test', 'validation']
    

    Mais ça n'apparait pas dans mon ficher. Je crois que c'est le code précédent qui a crée des dossiers que j'appellerai fantôme.
  • C'est tellement confus, bon courage aux aidants ! Si j'étais face au problème :

    1) Je mettrais un print() juste avant utilisation pour montrer le chemin précis qui est utilisé.

    2) Après avoir bien regardé et rien remarqué qui explique le problème, je posterais une capture d'écran qui montre le chemin complet du fichier, afin de permettre une comparaison précise avec ce que montre (1).

    Les \\ servent à donner un simple \ dans les chaînes non raw (les raw strings étant celles précédées de r). C'est du Python de base. On peut aussi utiliser os.listdir() pour valider le répertoire et vérifier que le fichier attendu est bien dedans.
  • J'ai redémarré le noyau et j'ai exécuté le code
    # plot dog photos from the dogs vs cats dataset
    from matplotlib import pyplot
    from matplotlib.image import imread
    # define location of dataset
    folder = r"C:\Users\ceche\.keras\datasets\dogs-vs-cats\train" 
    os.listdir(folder)
    # plot first few images
    for i in range(9):
      # define subplot
      pyplot.subplot(330 + 1 + i)
      # define filename
      filename = folder + r'\cat.' + str(i) + r'.jpg'
      # load image pixels
      image = imread(filename)
      # plot raw pixel data
      pyplot.imshow(image)
      # show the figure
      pyplot.show()
    

    J'ai reçu la réponse :
    Compilateur a écrit:

    FileNotFoundError Traceback (most recent call last)
    <ipython-input-8-29aa0afa2ac4> in <module>()
    4 # define location of dataset
    5 folder = r"C:\Users\ceche\.keras\datasets\dogs-vs-cats\train"
    ----> 6 os.listdir(folder)
    7 # plot first few images
    8 for i in range(9):

    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ceche\\.keras\\datasets\\dogs-vs-cats\\train'
  • Merci raoul.S pour le code (:D
  • @Brian : Après des années heureuse en mathématiques fondamentales, je me reconverti dans l'informatique petit à petit :)o .
  • Quand il me dit que le fichier n'y est pas je ne le crois pas !
  • J'ai bien raison de ne pas écouter mon compilateur il me dit :
    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users'
  • Poste un code minimal qui affiche :
    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users' 
    
  • folder = r"C:\Users" 
    os.listdir(folder)
    
  • Un tel script ne peut fonctionner de manière autonome. As-tu un Python installé normalement pour tester avec ? Que se passe-t-il si tu fais os.listdir() ?
  • os.listdir() me renvoit

    Mon python marche bien tout à l'heure j'ai fait tourner un réseau de neurones et j'utilise régulièrement numpy et matplotlib.
  • À mon avis :

    - ou bien tu testes mal ;

    - ou bien tu n'as pas de répertoire C:\Users ;

    - ou bien tu utilises un Python modifié avec des restrictions d'accès (me semble très hypothétique, mais bon...). Comment été installé ton interprète Python ?

    Tu peux essayer os.chdir("C:/") suivi de os.listdir() pour voir.
  • Pour os.chdir il me dit : FileNotFoundError: [Errno 2] No such file or directory: 'C:/'
  • Je rappelle que quand je regarde les propriétés du ficher l'adresse donnée par windows est : "C:\Users\blabla\.keras\datasets\dogs-vs-cats

    EDIT : J'ai remplacé mon pseudo par blabla sur le forum mais il a fini par fuité lol :)o
  • Je crois qu'il y a quelque chose de bizarre je dois réfléchir à quelles information pertinentes je pourrais trouver pour solve résoudre le truc.
  • Je code sur Google Colab et j'ai windows 10 comme vous l'aurez compris.
  • Mais si tu es sur Google Colab ton image "cat.0.jpg" ne doit pas se trouver sur ton pc... Google Colab ne peut pas lire ton disque local...
  • mon image est sur mon pc. Je ne savais pas que Google Colab ne pouvait pas lire mon disque local, je ne vois pas pourquoi. Jupyter non plus ?
  • Google Colab tourne chez Google, pas sur ton ordi. Si tu veux un Python qui tourne sur ton ordi, installe-le normalement depuis le site officiel.
  • Soit tu fais comme te suggère brian soit tu continues à utiliser Google Colab mais dans ce cas tu dois uploader ton image "cat.0.jpg" dans Google Drive et là tu pourras la lire avec Google Colab (si c'est ça que tu veux faire je peux te filer le code pour).

    Avec Google Colab tu utilises les machines de Google pour faire tourner tes scripts Python (les jupyter notebook que tu crées avec Colab ne se trouvent pas sur ton PC, mais dans le cloud), l'avantage est que tu n'as rien besoin d'installer ni Python ni rien d'autre et que tu peux utiliser les GPU de Google. L'inconvénient est que l'espace de stockage est limité (15 Go gratuits).
  • Super je progresse du coup demain je vais continuer mon livre. C'était intéressant d'utiliser le bibliothèque os.

    Est-ce que je continue sur Colab ou sur jupyter ben faut que je me décide. Colab j'aime bien pour écrire en latex, c'est surtout ça en fait.

    Merci à vous deux (:D
  • Si c'est vraiment Jupyter qui t'attire, tu peux le faire tourner sur ton ordi. Par exemple, quand on installe SageMath, on a un Python avec Jupyter (je n'ai testé ça que sous Linux, mais ça fonctionne sans doute aussi sous Windows).
  • @mini_calli : on peut parfaitement écrire des formules LaTeX dans un notebook Jupyter.
  • Je me suis mis sur Jupyter ça marche :). L'avantage de Colab c'est qu'on peut réduire les parties, ça rend la lectures plus faciles.
  • Raoul.S Je suis curieux de savoir comment faire sur Google Colab, même si ici je ne pourrais pas car comme vous l'avez dit l'espace est limité :)o
  • Pour Google Colab tu places tes images dans le dossier "Colab Notebooks" de ton Google Drive. Tu devrais déjà avoir ce dossier si tu as fait tourner des script Colab.

    Puis tu importes drive en faisant :
    from google.colab import drive
    

    et tu lui donnes l'autorisation d'aller mettre le nez dans ton Google Drive en faisant :
    drive.mount('/content/gdrive')
    

    En reprenant ton script et en supposant que tu places toutes tes images dans le sous-dossier "Colab Notebooks/datasets/dogs-vs-cats/train" tu a :
    # plot dog photos from the dogs vs cats dataset
    from google.colab import drive
    from matplotlib import pyplot
    from matplotlib.image import imread
    import os
    
    drive.mount('/content/gdrive')
    
    # define location of dataset
    folder = "gdrive/My Drive/Colab Notebooks/datasets/dogs-vs-cats/train" 
    os.listdir(folder)
    # plot first few images
    for i in range(9):
      # define subplot
      pyplot.subplot(330 + 1 + i)
      # define filename
      filename = folder + '/cat.' + str(i) + '.jpg'
      # load image pixels
      image = imread(filename)
      # plot raw pixel data
      pyplot.imshow(image)
      # show the figure
      pyplot.show()
    
  • Merci Raoul.S ! :D
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!