web-dev-qa-db-fra.com

Ouvrir le fichier dans un autre répertoire (Python)

J'ai toujours été un peu confus au sujet de la traversée de répertoires en Python et je suis curieux de constater une situation: j'ai un fichier auquel je veux accéder dans un répertoire essentiellement parallèle à celui dans lequel je suis actuellement. Étant donné cette structure de répertoire:

\parentDirectory
    \subfldr1
        -testfile.txt
    \subfldr2
        -fileOpener.py

J'essaie de créer un script dans fileOpener.py pour sortir de subfldr2, entrer dans subfldr1, puis appeler un open () sur testfile.txt.

En parcourant stackoverflow, j'ai vu des gens utiliser os et os.path pour accomplir cela, mais je n'ai trouvé que des exemples concernant les fichiers dans des sous-répertoires situés sous l'origine du script. 

En travaillant sur cela, j'ai réalisé que je pouvais simplement déplacer le script dans subfldr1 et que tout irait bien, mais ma curiosité est piquée quant à la façon dont cela pourrait être accompli.

EDIT: Cette question concerne particulièrement une machine Windows, car je ne sais pas comment les lettres de lecteur et les barres obliques inverses pourraient en tenir compte.

7
dbishop

Si vous connaissez le chemin complet du fichier, vous pouvez simplement faire quelque chose de similaire. Toutefois, si votre question concerne directement des chemins relatifs, avec lesquels je ne suis pas familier et que je devrai rechercher et tester.

path = 'C:\\Users\\Username\\Path\\To\\File'

with open(path, 'w') as f:
    f.write(data)

Modifier:

Voici une façon de le faire relativement au lieu d'absolu. Vous ne savez pas si cela fonctionne sous Windows, vous devrez le tester.

import os

cur_path = os.path.dirname(__file__)

new_path = os.path.relpath('..\\subfldr1\\testfile.txt', cur_path)
with open(new_path, 'w') as f:
    f.write(data)

Edit 2: Une petite remarque à propos de __file__, cela ne fonctionnera pas dans l'interpréteur interactif car il est exécuté de manière interactive et non à partir d'un fichier réel. 

9
Jared Mackey
import os
import os.path
import shutil

Vous trouvez votre répertoire actuel:

d = os.getcwd() #Gets the current working directory

Ensuite, vous changez un répertoire:

os.chdir("..") #Go up one directory from working directory

Ensuite, vous pouvez obtenir une liste complète de tous les répertoires, pour un répertoire supérieur:

o = [os.path.join(d,o) for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))] # Gets all directories in the folder as a Tuple

Ensuite, vous pouvez rechercher dans le tuple le répertoire de votre choix et ouvrir le fichier dans ce répertoire:

for item in o:
    if os.path.exists(item + '\\testfile.txt'):
    file = item + '\\testfile.txt'

Ensuite, vous pouvez faire stuf avec le chemin complet du fichier 'fichier'

3
Roan Fourie
from pathlib import Path

data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "raw_data.txt"

f = open(file_to_open)
print(f.read())
0
SaretMagnoslove

C'est une question très ancienne, mais je pense que cela aidera les débutants à apprendre à utiliser python . Si vous avez Python version 3.4 ou supérieure, la bibliothèque pathlib est fournie avec la distribution par défaut.

Pour l'utiliser, il vous suffit de passer un chemin ou un nom de fichier dans un nouvel objet Path () à l'aide de barres obliques et le reste. Pour indiquer que le chemin est une chaîne brute, mettez r devant la chaîne avec votre chemin réel.

Par exemple,

from pathlib import Path

dataFolder = Path(r'D:\Desktop dump\example.txt')

Source: Le moyen le plus simple de gérer les chemins de fichiers sous Windows, Mac et Linux

(erreur unicode) Le codec 'unicodeescape' ne parvient pas à décoder les octets en position 2-3: échappé tronqué\UXXXXXXXX

0
raman