2013-05-12 3 views
-1

В настоящее время у меня есть пара папок в каталоге для моего личного проекта python. Папки - это модули и ресурсы. Я пишу файл python, который будет находиться в папке модулей, но должен получить доступ к файлам из папки ресурсов.Навигация по файлам

Причина, по которой мой проект организован таким образом, я планирую иметь кучу отдельных .py-файлов для классов, которые я буду делать. Тогда в корневом каталоге у меня будет мой основной скрипт, который будет импортироваться из классов по мере необходимости.

Боковое примечание: Мой проект - это скрипт python, который сделает скатывание в 1000 раз более интересным, используя рулоны и записывая информацию.

-Edit-

Я не уверен, если я был ясен, но мне нужно знать, как some-file.py в папке модулей можно читать с каким-другим-file.txt в папке ресурсов. Я не могу жестко указать местоположение как «C:/rootFolder/resources», поскольку я планирую поделиться этим с друзьями (плюс я не могу гарантировать, что он всегда останется в одном месте в моей собственной системе).

ответ

2

Вы можете добавить путь к каталогу, который содержит modules и resources папки для system path (sys.path) или PYTHONPATH и превратите каталоги modules и resources в packages, добавив файл __init__.py.

Теперь для доступа к этим модулям просто импортировать их:

import modules 
from modules import some_module 
import modules.some_module 

Edit:

Чтобы прочитать текстовую присутствующий в папке ресурсов из файла в папке модуля использовать относительный путь:

with open("../resources/file.txt") as f: 
    #do something with file 

.. означает родительскую папку текущей папки.

Если текущий рабочий каталог не модули затем использовать это:

import os 
cwd = os.path.dirname(os.path.realpath(__file__))  #path to current file 
par_dir = os.path.split(cwd)[0]      #path to parent directory 
my_file = os.path.join(par_dir,"resources/file.txt") #path to file in resources dir 
with open(myfile) as f: 
    #do something 
+0

Хотя это полезная информация, я не уверен, как это помогает мне. Я отредактировал мой вопрос, чтобы сделать его более ясным. – RMDan

+0

@ RMDan Я обновил свое решение. –

+0

Это имеет смысл. Я не был уверен, что это сработает или нет. – RMDan

0

несколько различных различные способы, вы можете сделать это, используя пустые __init__.py файлов, чтобы указать, что это каталог модуля (from here):

sound/       Top-level package 
     __init__.py    Initialize the sound package 
     modules/     Subpackage for file format conversions 
       __init__.py 
       onefile.py 
       auwrite.py 
       ... 
     resources/     Subpackage for sound effects 
       __init__.py 
       another.py 
       ... 
     filters/     Subpackage for filters 
       __init__.py 
       equalizer.py 
       vocoder.py 

       ... 

Или вы можете добавить директории в PATH с sys (more info here)

import sys 
sys.path.append("C:/resources") 
+0

Хотя это полезная информация, я не уверен, как это помогает мне. Я отредактировал мой вопрос, чтобы сделать его более ясным. – RMDan

+0

'sys.path' не' PYTHONPATH', 'sys.path' - это коллекции нескольких вещей, а один из них -' PYTHONPATH'. –

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