2015-09-09 5 views
5

Я всегда был в замешательстве по поводу обхода каталога в Python и имел ситуацию, в которой мне любопытно: у меня есть файл, который я хочу получить в каталоге по существу параллельно друг я нахожусь в данный момент в такой структуре каталогов:.Открыть файл в другом каталоге (Python)

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

Я пытаюсь сценария в fileOpener.py, чтобы выйти из subfldr2, попасть в subfldr1, а затем вызвать открытое() на testfile.txt.

Из просмотра stackoverflow, я видел, что люди используют os и os.path, но я нашел примеры только для файлов в подкаталогах под началом сценария.

Работая над этим, я понял, что могу просто переместить сценарий в subfldr1, и тогда все будет хорошо, но мое любопытство вызвано тем, как это будет достигнуто.

EDIT: Этот вопрос относится, в частности, к машине с Windows, поскольку я не знаю, как факторы диска и обратная косая черта будут влиять на это.

+0

вам необходимо установить ток Do каталог в 'subfldr1' * и * открыть файл внутри? Или вам нужно только открыть файл, но не изменился ли ваш текущий каталог? –

+0

@ DanLowe Мне не нужно на самом деле менять текущий каталог, просто получить доступ к файлу testfile.txt, откуда я нахожусь в subfldr2 – dbishop

ответ

9

Если вы знаете полный путь к файлу, вы можете просто сделать что-то похожее на это. Однако, если вы сомневаетесь в прямом отношении к относительным путям, я не знаком с ними и должен будет исследовать и тестировать.

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

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

Edit:

Вот способ сделать это относительно вместо абсолютной. Не уверен, что это работает в окнах, вам придется протестировать его.

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: Одно быстрое примечание о __file__, это не будет работать в интерактивном интерпретаторе из-за того, что побежал в интерактивном режиме, а не от фактического файла.

+0

Я понял, что это будет что-то в этом направлении, но я спрашиваю конкретно о машине Windows, поскольку добавление буквы диска и обратной косой черты, я уверен, немного усложняет это. Теперь редактируем вопрос, чтобы указать это. – dbishop

+0

Обновлено для окон – electrometro

+0

Немного педантичное примечание - вы можете сделать это 'r'PATH'' или избежать' '' ' – theB

2
import os 
import os.path 
import shutil 

Вы найдете текущий каталог:

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

Затем вы меняете один каталог вверх:

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

Тогда вы можете получить tupple/список всех каталогов, для одного каталога 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 

Тогда вы можете найти кортеж для каталога вы хотите и открыть файл в этом каталоге:

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

Затем вы можете сделать Stuf с полным путем к файлу «файла»

Смежные вопросы