[PYTHON] Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError

introduction

Lors de la lecture avec un exemple de code en python Presque 100% de la lecture du fichier Mauvaise situation où "Erreur de fichier introuvable" se produit.

Je pensais que la raison pour laquelle je n'avais pas grandi pour toujours était parce que je n'avais pas enregistré ma réflexion. Tenir un registre

Mauvaise situation cette fois

À l'origine, il y aurait également des problèmes de sécurité C'est embarrassant de montrer ma structure de dossiers en désordre aux gens Pour éviter que la même chose ne se reproduise à l'avenir Je ne porterai même pas un seul pantalon, donc je le garderai tel quel.

organisation des fichiers


C:\Users\watya\protos>
├─kagglebook-master
│  ├─ch01
│  │  └─ch01-01-titanic.py
│ ├─ ・ ・ ・
│  ├─input
│  │  └─ch01-titanic
│  │   ├─gender_submission.csv
│  │   ├─test.csv
│  │   └─train.csv
… …

Commande exécutée


C:\Users\watya\protos> & C:/Users/watya/Anaconda3/python.exe c:/Users/watya/protos/kagglebook-master/ch01/ch01-01-titanic.py

Programme exécuté (uniquement au début)


import numpy as np
import pandas as pd

# -----------------------------------
#Lecture des données d'entraînement et des données de test
# -----------------------------------
#Lecture des données d'entraînement et des données de test
train = pd.read_csv('../input/ch01-titanic/train.csv')
test = pd.read_csv('../input/ch01-titanic/test.csv')

Erreur survenue


FileNotFoundError: [Errno 2] File b'../input/ch01-titanic/train.csv' does not exist: b'../input/ch01-titanic/train.csv'

Cause de l'erreur

Vous pouvez le voir en regardant [Commande exécutée] Réellement  C:\Users\watya\protos Même si ça marche  c:/Users/watya/protos/kagglebook-master/ch01/ Parce que vous vous «méprenez» sur ce que vous faites  FileNotFoundError Est passe.

Sur la base de ce "malentendu", je pense qu'il serait bon que nous puissions prendre une réponse calme afin que nous puissions spécifier un chemin approprié.

Contre-mesure (1): Tout d'abord, où allez-vous maintenant? Comprendre et retrouver son calme

Référence: https://note.nkmk.me/python-os-getcwd-chdir/

Obtenir / vérifier le répertoire actuel: utilisez os.getcwd ()

Vous devriez l'utiliser comme ça

Dossier d'exécution


import numpy as np
import pandas as pd
import os

print("Localisation actuelle:{}".format(os.getcwd()))← Insérez ici

# -----------------------------------
#Lecture des données d'entraînement et des données de test
# -----------------------------------
#Lecture des données d'entraînement et des données de test
train = pd.read_csv('../input/ch01-titanic/train.csv')
test = pd.read_csv('../input/ch01-titanic/test.csv')

Résultat d'exécution


PS C:\Users\watya\protos> & C:/Users/watya/Anaconda3/python.exe c:/Users/watya/protos/kagglebook-master/ch01/ch01-01-titanic.py
Localisation actuelle:C:\Users\watya\protos ←pd.read_csv()Voir où le fichier a été référencé
Traceback (most recent call last):
・ ・ ・
FileNotFoundError: [Errno 2] File b'../input/ch01-titanic/train.csv' does not exist: b'../input/ch01-titanic/train.csv'

Au pire, la panique peut être évitée avec cela. Si vous connaissez votre emplacement actuel, vous pouvez voir la direction de la solution parce que vous pouvez comprendre que "je vois, ce n'est pas bon parce que vous faites référence d'un endroit complètement différent."

Action (2): spécifiez un chemin d'accès approprié afin que le fichier puisse être référencé.

Je pense qu'il y a plusieurs façons de le faire, alors j'ai écrit toutes celles qui me sont venues à l'esprit (je pense qu'il y en a plus ...) ① Faites de l'argument de read_csv () un chemin absolu au lieu d'un chemin relatif. (2) Déplacez le chemin d'exécution vers le fichier d'exécution avant l'exécution. En d'autres termes   C:\Users\watya\protos> ne pas   C:\Users\watya\protos/kagglebook-master/ch01/> Courir ③ Utilisez os.chdir () pour déplacer le répertoire d'exécution après l'exécution et y faire référence.

Tout va bien, mais personnellement je n'avais aucune fierté Je veux éviter de jouer avec le code comme ① parce que j'utilise souvent le code autour de pakuri. J'aime personnellement l'ajouter dans ③.

Si vous n'avez pas à vous soucier du code, ② est le plus beau car vous ne touchez pas le plus au code. Si vous avez beaucoup d'oubli, vous vous perdrez souvent en sautant ici. Je pense que ③ convient à la personnalité.

Quand j'ai tout écrit, j'ai écrit ce qui est arrivé au code de ①②.

Dossier d'exécution (en cas de ①)


import numpy as np
import pandas as pd

# -----------------------------------
#Lecture des données d'entraînement et des données de test
# -----------------------------------
#Lecture des données d'entraînement et des données de test
train = pd.read_csv('c:/Users/watya/protos/kagglebook-master/input/ch01-titanic/train.csv')← Réécrit ici
test = pd.read_csv('c:/Users/watya/protos/kagglebook-master/input/ch01-titanic/test.csv')← Réécrit ici

Dossier d'exécution (en cas de ③)


import numpy as np
import pandas as pd
import os

os.chdir('kagglebook-master/ch01/')← Insérez ici

# -----------------------------------
#Lecture des données d'entraînement et des données de test
# -----------------------------------
#Lecture des données d'entraînement et des données de test
train = pd.read_csv('../input/ch01-titanic/train.csv')
test = pd.read_csv('../input/ch01-titanic/test.csv')

Extra: utiliser l'instruction assert

Cette fois, c'est une référence de fichier Que faire si vous vous perdez C'est un peu hors sujet, mais os.getcwd () est juste une façon flagrante de l'utiliser dans le débogage. Normalement, je me demande comment il est d'écrire du code qui crache un tel FileNotFoundError ... Notez également comment intercepter l'erreur avec l'instruction assert.

Dossier d'exécution


import numpy as np
import pandas as pd
import os

#vérification de l'existence du fichier csv
assert os.path.isfile('../input/ch01-titanic/train.csv'), 'train.Il n'y a pas de csv'
assert os.path.isfile('../input/ch01-titanic/test.csv'), 'test.Il n'y a pas de csv'

# -----------------------------------
#Lecture des données d'entraînement et des données de test
# -----------------------------------
#Lecture des données d'entraînement et des données de test
train = pd.read_csv('../input/ch01-titanic/train.csv')
test = pd.read_csv('../input/ch01-titanic/test.csv')

Résultat d'exécution


PS C:\Users\watya\protos> & C:/Users/watya/Anaconda3/python.exe c:/Users/watya/protos/kagglebook-master/ch01/ch01-01-titanic.py
Traceback (most recent call last):
  File "c:/Users/watya/protos/kagglebook-master/ch01/ch01-01-titanic.py", line 9, in <module>
    assert os.path.isfile('../input/ch01-titanic/train.csv'), 'train.Il n'y a pas de csv'
AssertionError: train.Il n'y a pas de csv
PS C:\Users\watya\protos>

C'est très rafraîchissant. Cependant, avec cela seul, pourquoi n'y a-t-il pas de fichier après tout? Ce n'est pas une solution, mais cela ne crache pas une FileNotFoundError féroce pour le moment.

en conclusion

Je pensais que j'écrivais un article de bas niveau ... Je pense qu'il vaut mieux accepter que c'est le niveau actuel.

Aussi, si j'écris seulement ceci, je me souviens de moi, et même si je l'oublie encore Si vous recherchez «Erreur de fichier introuvable» dans Qiita, votre article sera capturé. C'est déjà sûr!

~ Fin ~

Recommended Posts

Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError
Que faire si Combinaisons devient «couverture inconnue»
Que faire si vous obtenez moins zéro en Python
Que faire si vous obtenez une erreur de décodage Unicode avec l'installation de pip
Que faire si vous vous fâchez avec TensorFlow v2 sans l'attribut "app"
Que faire lorsque TypeError se produit au minimum et au maximum de numpy
Que faire si vous ne pouvez pas installer avec pip dans l'environnement babun
Que faire si vous obtenez Impossible de récupérer l'URL 443 avec pip
Que faire si vous obtenez une erreur "Aucune version trouvée" sur pipenv
swapon failed: Que faire si vous vous fâchez contre l'opération non autorisée
Que faire si vous obtenez une erreur lors de l'installation de python avec pyenv
Que faire si vous obtenez «Python non configuré». Utilisation de PyDev dans Eclipse
Que faire lorsque vous vous fâchez avec "Value Error: unknown local: UTF-8" dans python manage.py syncdb
Que faire si vous ne pouvez pas trier les fichiers avec des indices
Que faire si vous ne pouvez pas vous connecter en tant que root
Que faire si vous obtenez une erreur OpenSSL lors de l'installation de Python 2 avec pyenv
Que faire quand "Aucun noyau pour le langage python trouvé" apparaît dans Hydrogen
Que faire si vous obtenez "(35, 'Erreur de connexion SSL')" dans pycurl (l'un d'entre eux)
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Que faire si vous obtenez une erreur d'importation lors de l'importation de matplotlib avec Jupyter
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
Que faire si vous ne pouvez pas installer pyaudio avec pip #Python
Que faire si vous ne pouvez pas construire un projet avec Maven
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Que faire lorsque swagger-codegen est terminé avec python et Erreur d'importation: aucun module nommé n'apparaît
Que faire si vous obtenez une erreur Impossible de récupérer le lien métallique pour le référentiel avec yum
Que faire si vous obtenez une erreur lors de l'exécution de "certbot renouveler" dans l'environnement CakePHP
Que faire si vous obtenez une erreur non définie lorsque vous essayez d'utiliser pip avec pyenv
Que faire si vous recevez une erreur d'appel avec trop d'arguments d'entrée à faire et retourner dans un test de golang
Que faire si l'option -f de grep ne fonctionne pas
Que faire si vous vous fâchez contre les `` déclarations '' doivent être une liste 2D ... dans la flèche matplotlib
Que faire si pipreqs aboutit à UnicodeDecodeError
Que faire si PDO n'est pas trouvé dans Laravel ou CakePHP
Que faire si vous ne parvenez pas à envoyer un e-mail à Yahoo avec Python.
Que faire si vous ne pouvez pas utiliser la recherche de grille de sklearn en Python
Que faire si vous êtes bloqué pendant l'installation d'Anaconda sur Linux
Que faire si vous obtenez une erreur indiquant que le compilateur C ne peut pas créer d'exécutables dans configure
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
Que faire si vous obtenez une erreur lors du chargement de mnist
Que faire si vous obtenez une erreur de remplacement obligatoire `get_config` lorsque vous essayez de model.save avec Keras
Que faire pour obtenir une feuille de calcul Google en Python
Si vous vous perdez avec les redirections HTTP 301 et 302
EC2 / Amazon Linux2: Que faire si une erreur "Impossible d'exécuter'gcc ': aucun fichier ou répertoire de ce type" se produit avec l'installation de pip
Que faire si vous êtes en colère contre "le backend Gtk * nécessite l'installation de pygtke" même si pygtk est inclus dans matplotlib
Que faire si vous obtenez un avertissement "Mauvaise plateforme Python" lors de l'utilisation de Python avec l'EDI NetBeans
Que faire si vous ne pouvez pas installer mysqlclient
Aucun module nommé Que faire si vous obtenez "libs.resources"
ModuleNotFoundError: No module Que faire si vous obtenez 'sensorflow.contrib'
Liens pour faire ce que vous voulez avec Sublime Text
Que faire si une erreur de décodage Unicode se produit dans pip
Que faire lorsqu'une erreur "service inconnu" est renvoyée par le serveur gRPC
Que faire si vous obtenez une erreur de mémoire lors de la conversion de PySparkDataFrame en PandasDataFrame
Que faire si les importations de tri restent bloquées dans l'extension Python de VSCode (vers 2020/09)
Que faire si vous obtenez l'erreur ʻERR_FEATURE_UNAVAILABLE_ON_PLATFORM` lors de l'utilisation de ts-node-dev sous Linux
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Que faire lorsque ʻarguments [0] .scrollIntoView (); `échoue dans python sélénium
Que faire si pip donne une DistributionError dans Homebrew
Que faire si une erreur 0xC0000005 se produit dans tf.train.start_queue_runners ()