Travailler sur OS X Lion, j'essaie d'ouvrir un fichier dans mon programme Python de n'importe où dans le terminal. J'ai défini la fonction suivante dans mon .bash_profile: de cette façon, je peux (dans le terminal) exécuter mon test de test à partir d'un autre répertoire que mon ~ /. p> Maintenant, si je suis dans mon répertoire d'origine et exécutez le programme, les éléments suivants fonctionnent p> Cependant, si je suis dans un répertoire différent de mon dossier à domicile et écrire "TestProgram" dans le terminal, le programme commence mais ne peut pas trouver le fichier test.txt. P> Y a-t-il un moyen de toujours ouvrir Python Ouvrir le fichier du même emplacement non affecté de l'endroit où j'exécute le programme? P> P>
6 Réponses :
Utilisez le tilde pour représenter le dossier Home, comme vous le feriez dans le .bash_profile code> et utilisez os.path.expanduser code>. import os
infile = open(os.path.expanduser("~/folder2/test.txt"), "r+")
@ Jochimisaksson: Désolé, j'ai oublié d'ajouter OS.Path.Expanduser code>.
Ce n'est pas différent de vous référer à un fichier via toute autre chose en dehors de Python, vous devez utiliser un chemin absolu plutôt qu'un relatif. P>
Si vous souhaitez vous référer à des fichiers relatifs à l'emplacement du script, vous pouvez également utiliser l'attribut Aussi, plutôt que d'utiliser une fonction de shell, donnez simplement à votre script une ligne Shebang ( __ __ code> dans votre module pour obtenir l'emplacement du module en cours d'exécution. P >
#! / usr / bin / env python code>), chmod + x code> et mettez-y un lieu sur votre page code>. p>
J'utilise la méthode env Décrôturée ici régulièrement. En fonction de la manière dont vous utilisez des modules personnalisés, vous devrez peut-être mettre à jour votre pythonpath.
Vous pouvez simplement exécuter la fonction dans un sous-groupe afin que vous puissiez cd code> home avant de l'exécuter: function testprogram() { (
cd && python .folder/.testprogram.py
) }
Utilisez soit un chemin complet comme ou abrégé one p>
in python sys.argv [0] code> sera défini sur le chemin du script (si connu). Vous pouvez utiliser cela plus les fonctions dans OS.Path code> pour accéder aux fichiers relatifs au répertoire contenant le script. Par exemple, import sys, os.path
script_path = sys.argv[0]
script_dir = os.path.dirname(script_path)
def script_relative(filename):
return os.path.join(script_dir, filename)
infile = open(script_relative("folder2/test.txt"), "r+")
sys.argv [0] code> n'est pas garanti de donner le chemin du répertoire actuel au script. Par exemple, le script pourrait simplement être sur le chemin de l'utilisateur.
@Davidrobinson, hein, pydoc sys code> implique qu'il s'agit toujours d'un nom de chemin, mais docs.python.org/library/sys.html dit que ce n'est peut-être pas. J'ai donc suggéré d'utiliser __ fichier __ code> à la place.
Si vous voulez le faire multiplateform, je recommanderais
import os
open(os.path.join(os.path.expanduser('~'),'rest/of/path/to.file'))
Cette jointure est complètement inutile. "Mais multipliant ..." Vous avez déjà des barres éruptions comme des séparateurs de chemins dans "repos / de chemin / chemin / à.file", alors comment "~ / repos / de chemin / path / to.file" peut-il être un problème?
lol bon point ... aussi python traite toujours / code> en tant que séparateurs de chemin de chemin si meh ..: p
Que signifie la fonction
TestProgram () code> avec le programme Python?