Supposons que le code python soit exécuté dans un répertoire Windows inconnu, disons «main», et partout où le code est installé lorsqu'il s'exécute, il doit accéder au répertoire «main / 2091 / data.txt».
comment utiliser la fonction open (location)? quel devrait être l'emplacement?
Éditer :
J'ai trouvé que le code simple ci-dessous fonctionnera..a-t-il des inconvénients?
file="\2091\sample.txt"
path=os.getcwd()+file
fp=open(path,'r+');
python
file
path
relative-path
Camélia
la source
la source
r"\2091\sample.txt"
. Ou leur échapper comme"\\2091\\sample.txt"
(mais c'est ennuyeux). En outre, 2) vous utilisez getcwd () qui est le chemin dans lequel vous vous trouviez lorsque vous exécutez le script. Je pensais que vous vouliez par rapport à l'emplacement du script (mais je me demande maintenant). Et 3), utilisez toujours desos.path
fonctions pour manipuler les chemins. Votre ligne de jonction de chemin doit êtreos.path.join(os.getcwd(), file)
4) le; est inutilewith open(path, 'r+') as fp:
. Voir ici pour la meilleure explication deswith
déclarations que j'ai vues.os.path.abspath
pour obtenir facilement le chemin complet du chemin relatif à ouvrir. la déclaration finale ressemble à ceci:os.path.abspath('./2091/sample.txt')
Réponses:
Avec ce type de chose, vous devez faire attention à votre répertoire de travail réel. Par exemple, vous ne pouvez pas exécuter le script à partir du répertoire dans lequel se trouve le fichier. Dans ce cas, vous ne pouvez pas simplement utiliser un chemin relatif par lui-même.
Si vous êtes sûr que le fichier souhaité se trouve dans un sous-répertoire sous l'endroit où se trouve réellement le script, vous pouvez l'utiliser
__file__
pour vous aider ici.__file__
est le chemin d'accès complet à l'emplacement du script que vous exécutez.Vous pouvez donc jouer avec quelque chose comme ça:
la source
__file__
est un chemin relatif (au moins sur ma configuration, pour une raison quelconque), et vous devez d'os.path.abspath(__file__)
abord appeler . osx / homebrew 2.7NameError: name '__file__' is not defined
Ce code fonctionne très bien:
la source
J'ai créé un compte juste pour pouvoir clarifier une divergence que je pense avoir trouvée dans la réponse originale de Russ.
Pour référence, sa réponse initiale était:
C'est une excellente réponse car elle tente de créer dynamiquement un chemin système absolu vers le fichier souhaité.
Cory Mawhorter a remarqué qu'il s'agissait d'
__file__
un chemin relatif (c'est aussi le cas sur mon système) et a suggéré d'utiliseros.path.abspath(__file__)
.os.path.abspath
, cependant, renvoie le chemin absolu de votre script actuel (ie/path/to/dir/foobar.py
)Pour utiliser cette méthode (et comment je l'ai finalement fait fonctionner), vous devez supprimer le nom du script à la fin du chemin:
Le abs_file_path résultant (dans cet exemple) devient:
/path/to/dir/2091/data.txt
la source
os.path.dirname(os.path.abspath(__file__))
os.path.dirname
fonctionnalité vous-même comme je l'ai fait dans ma réponse l'année dernière.Cela dépend du système d'exploitation que vous utilisez. Si vous voulez une solution compatible avec Windows et * nix, quelque chose comme:
devrait bien fonctionner.
Le
path
module est capable de formater un chemin pour n'importe quel système d'exploitation sur lequel il s'exécute. De plus, python gère très bien les chemins relatifs, tant que vous disposez des autorisations appropriées.Modifier :
Comme mentionné par kindall dans les commentaires, python peut de toute façon convertir entre les chemins de style Unix et de style Windows, donc même un code plus simple fonctionnera:
Cela étant dit, le
path
module a encore quelques fonctions utiles.la source
relpath()
convertit un chemin en chemin relatif. Comme c'est déjà un chemin relatif, cela ne fera rien.os.path
module qui serait un meilleur choix?__file__
. S'il vous plaît voir ma réponse.Je passe beaucoup de temps à découvrir pourquoi mon code ne trouve pas mon fichier exécutant Python 3 sur le système Windows. Alors j'ai ajouté. avant / et tout fonctionnait bien:
la source
file_path = os.path.join(script_dir, 'output03.txt')
script_dir = os.path.abspath(os.path.dirname(__file__))
Code:
Explication:
Importer la bibliothèque:
Utilisez
__file__
pour atteindre le chemin du script actuel:Sépare le chemin du script en plusieurs éléments:
Supprimez le dernier élément de la liste (le fichier de script réel):
Ajoutez le chemin du fichier relatif:
Rejoignez les éléments de la liste et ajoutez le fichier du chemin relatif:
Vous êtes maintenant prêt à faire ce que vous voulez avec le fichier, par exemple:
la source
path = "/".join(script_directory) + "/" + rel_path
vous devez utiliser le module os comme danspath = os.path.join(script_directory, rel_path)
. Au lieu d'analyser manuellement le chemin, vous devriez utiliserscript_path = os.path.dirname(__file__)
Essaye ça:
Python 3.4 a introduit une nouvelle bibliothèque standard pour traiter les fichiers et les chemins appelée pathlib. Ça marche pour moi!
la source
Si le fichier est dans votre dossier parent, par exemple. follower.txt, vous pouvez simplement utiliser
open('../follower.txt', 'r').read()
la source
Je ne sais pas si cela fonctionne partout.
J'utilise ipython dans ubuntu.
Si vous souhaitez lire le fichier dans le sous-répertoire du dossier actuel:
votre script est dans le dossier courant, essayez simplement ceci:
la source
Python passe simplement le nom de fichier que vous lui donnez au système d'exploitation, qui l'ouvre. Si votre système d'exploitation prend en charge les chemins relatifs comme
main/2091/data.txt
(indice: c'est le cas), cela fonctionnera bien.Vous constaterez peut-être que le moyen le plus simple de répondre à une question comme celle-ci est de l'essayer et de voir ce qui se passe.
la source
getcwd()
. J'ai lu la description originale comme "relative à l'endroit où j'exécute le script, quel que soit l'endroit où se trouve le code".la source
Quand j'étais débutant, j'ai trouvé ces descriptions un peu intimidantes. Comme au début j'essaierais
For Windows
et cela soulèverait un
syntax error
. J'avais l'habitude d'être beaucoup confus. Puis après avoir surfé sur google. a trouvé pourquoi l'erreur s'est produite. Écrire ceci pour les débutantsC'est parce que pour que le chemin soit lu en Unicode, vous ajoutez simplement un
\
lors du démarrage du chemin du fichierEt maintenant cela fonctionne juste ajouter
\
avant de démarrer le répertoire.la source
\t
comme par exemple\top\directory
, que «\ t» est interprété comme un caractère de tabulation et votre «astuce» échoue. La meilleure option est d'utiliser le format de chaîne bruter'C:\Users\chidu\Desktop\Skipper New\Special_Note.txt'
qui n'essaye pas d '«échapper» les caractères.