Suppose my python code is executed a directory called principal
and the application needs to access principal/2091/data.txt
.
how should I use open(location)
? what should the parameter location
be?
I found that below simple code will work.. does it have any disadvantages?
fichier = "\2091\sample.txt"
chemin = os.getcwd()+fichier
fp = open(chemin, 'r+');
3 votes
Vous utilisez des barres obliques non échappées. C'est un désavantage.
8 votes
Plusieurs inconvénients. 1) Comme le mentionne @orip, utilisez des barres obliques pour les chemins, même sous windows. Votre chaîne ne fonctionnera pas. Ou utilisez des chaînes brutes comme
r"\2091\sample.txt"
. Ou échappez-les comme"\\2091\\sample.txt"
(mais c'est ennuyeux). Aussi, 2) vous utilisez getcwd() qui est le chemin dans lequel vous étiez lorsque vous avez exécuté le script. Je pensais que vous vouliez relatif à l'emplacement du script (mais maintenant je me demande). Et 3), utilisez toujours les fonctionsos.path
pour manipuler les chemins. Votre ligne de jointure de chemin devrait êtreos.path.join(os.getcwd(), fichier)
4) le ; est inutile4 votes
Et pour bien faire... 5) utilisez des context guards pour garder votre code propre et éviter d'oublier de fermer votre fichier:
with open(path, 'r+') as fp:
. Voir ici pour la meilleure explication des instructionswith
que j'ai pu trouver.1 votes
À côté des soins nécessaires sur les barres obliques, comme indiqué précédemment, il y a la fonction
os.path.abspath
pour obtenir facilement le chemin complet du chemin relatif à ouvrir. L'instruction finale ressemble à ceci :os.path.abspath('./2091/sample.txt')