J'ai utilisé pour ouvrir les fichiers qui étaient dans le même répertoire que le cours d'exécution d'un script Python en utilisant simplement une commande comme celle - open("Some file.txt", "r")
. Cependant, j'ai découvert que lorsque le script a été exécuté sous Windows en double-cliquant dessus, qu'il allait essayer d'ouvrir le fichier à partir du répertoire incorrect.
Depuis lors, j'ai utilisé une commande de la formeopen(os.path.join(sys.path[0], "Some file.txt"), "r")
chaque fois que je voulais ouvrir un fichier. Cela fonctionne pour mon usage particulier, mais je ne suis pas sûr si sys.path[0]
peut échouer dans certains autres cas d'utilisation. Donc ma question est: Quelle est la meilleure et la plus fiable pour ouvrir un fichier dans le même répertoire que le cours d'exécution d'un script Python?
Voici ce que j'ai pu découvrir jusqu'à présent:
os.getcwd()
etos.path.abspath('')
retour le "répertoire de travail", et non pas le répertoire de script.os.path.dirname(sys.argv[0])
etos.path.dirname(__file__)
retour le chemin d'accès utilisé pour appeler le script, ce qui peut être relatif ou même vide (si le script est dans le cwd). Aussi,__file__
n'existe pas lorsque le script est exécuté au RALENTI ou PythonWin.sys.path[0]
etos.path.abspath(os.path.dirname(sys.argv[0]))
semblent revenir le répertoire de script. Je ne suis pas sûr si il n'y a aucune différence entre ces deux.
[edit:]
Je viens de réaliser que ce que je veux faire serait mieux décrit comme "ouvrir un fichier dans le même répertoire que celui contenant le module". En d'autres termes, si je importer un module que j'ai écrit dans un autre répertoire, et que le module s'ouvre un fichier, je le veux chercher le fichier dans le répertoire du module. Je ne pense pas que tout ce que j'ai trouvé est en mesure de le faire...