2015-09-09 8 views
5

Sono sempre stato un po 'confuso sull'argomento directory traversal in Python, e ho una situazione di cui sono curioso: ho un file a cui voglio accedere in una directory sostanzialmente parallelo a quello che sono attualmente in Data questa struttura di directory:.Apri file in un'altra directory (Python)

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

sto cercando di script fileOpener.py di uscire subfldr2, entrare in subfldr1, e quindi chiamare un open() su testfile.txt.

Dalla visualizzazione dello stackoverflow, ho visto persone utilizzare os e os.path per eseguire questa operazione, ma ho trovato solo esempi relativi a file in sottodirectory al di sotto dell'origine dello script.

Lavorando su questo, mi sono reso conto che avrei potuto riposizionare lo script in subfldr1 e quindi tutto sarebbe andato bene, ma la mia curiosità è stimolata da come ciò sarebbe stato realizzato.

MODIFICA: questa domanda si riferisce in particolare a una macchina Windows, in quanto non so in che modo le lettere di unità e le barre rovesciate potrebbero farcela.

+0

Avete bisogno di impostare la corrente directory a 'subfldr1' * e * apre il file all'interno? O hai solo bisogno di aprire il file, ma se la tua directory corrente è cambiata non importa? –

+0

@DanLowe Non ho bisogno di modificare la directory corrente, basta accedere a testfile.txt da dove mi trovo in subfldr2 – dbishop

risposta

9

Se si conosce il percorso completo del file, è sufficiente fare qualcosa di simile. Tuttavia, se la domanda si riferisce direttamente a percorsi relativi, che non ho familiarità con e dovrei cercare e testare.

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

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

Edit:

Ecco un modo per farlo relativamente al posto di assoluto. Non sono sicuro che funzioni su Windows, dovrai testarlo.

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: Una breve nota su __file__, questo non funzionerà nell'interprete interattivo è dovuto essere corse in modo interattivo e non da un file vero e proprio.

+0

Ho pensato che sarebbe stato qualcosa lungo questa linea, ma sto chiedendo specificamente per una macchina Windows, come l'aggiunta della lettera di unità e dei backslash sono sicuro che questo complica un po '. Modifica la domanda ora per specificarlo. – dbishop

+0

Aggiornamento per windows – electrometro

+0

Nota leggermente pedante: potresti voler rendere 'r'PATH'' o sfuggire al' \\ 's – theB

2
import os 
import os.path 
import shutil 

Potete trovare la directory corrente:

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

quindi si modifica una directory up:

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

Poi si può ottenere un tupple/elenco di tutte le directory, per una directory up:

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 

Poi si può cercare la tupla per la directory desiderata e aprire il file in quella directory:

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

allora si può fare stuf con il 'file' percorso completo del file

Problemi correlati