154 votes

Ouvrir un fichier dans un emplacement relatif en Python

Supposons que le code python soit exécuté dans un répertoire inconnu de Windows, par exemple 'main', et que, quel que soit l'endroit 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) ? quelle doit être la localisation ?

Edit :

J'ai découvert que le code simple ci-dessous fonctionne présente-t-il des inconvénients ?

    file="\2091\sample.txt"
    path=os.getcwd()+file
    fp=open(path,'r+');

7voto

dcampos Points 71

Essayez ça :

from pathlib import Path

data_folder = Path("/relative/path")
file_to_open = data_folder / "file.pdf"

f = open(file_to_open)

print(f.read())

Python 3.4 a introduit une nouvelle bibliothèque standard pour traiter les fichiers et les chemins, appelée pathlib. Cela fonctionne pour moi !

7voto

Patriots299 Points 355

Code :

import os
script_path = os.path.abspath(__file__) 
path_list = script_path.split(os.sep)
script_directory = path_list[0:len(path_list)-1]
rel_path = "main/2091/data.txt"
path = "/".join(script_directory) + "/" + rel_path

Explication :

Bibliothèque d'importation :

import os

Utilisez __file__ pour atteindre le chemin du script actuel :

script_path = os.path.abspath(__file__)

Sépare le chemin script en plusieurs éléments :

path_list = script_path.split(os.sep)

Supprime le dernier élément de la liste (le fichier script actuel) :

script_directory = path_list[0:len(path_list)-1]

Ajouter le chemin du fichier relatif :

rel_path = "main/2091/data.txt

Joindre les éléments de la liste, et ajouter le fichier du chemin relatif :

path = "/".join(script_directory) + "/" + rel_path

Maintenant, vous êtes prêt à faire ce que vous voulez avec le fichier, comme, par exemple :

file = open(path)

3voto

Olivia Liao Points 337

Si le fichier est dans votre dossier parent, par exemple follower.txt, vous pouvez simplement utiliser open('../follower.txt', 'r').read()

3voto

Webucator Points 808
import os
def file_path(relative_path):
    dir = os.path.dirname(os.path.abspath(__file__))
    split_path = relative_path.split("/")
    new_path = os.path.join(dir, *split_path)
    return new_path

with open(file_path("2091/data.txt"), "w") as f:
    f.write("Powerful you have become.")

2voto

kindall Points 60645

Python transmet 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), alors cela fonctionnera parfaitement.

Vous constaterez peut-être que le moyen le plus simple de répondre à une question de ce type est d'essayer et de voir ce qui se passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X