2016-03-17 2 views
0

Я пишу код, где загружаю много данных проекта. Я хочу сохранить свои пути в коде относительно некоторого местоположения этого проекта на диске, т. Е. Не иметь его настроенного или жестко закодированного.Как получить относительный путь к папке, содержащей файл .m

Есть ли функция в matlab, чтобы сделать что-то вроде этого?

В Python я хотел бы написать:

ROOT = os.path.dirname('__file__') 

ответ

0

Лучший рецепт, чтобы организовать свой код, чтобы иметь такую ​​функцию:

function [ path ] = get_path() 
    path = [regexprep(mfilename('fullpath'), ['\' filesep '[\w\.]*$'],'') filesep]; 
end 

Вы поместите его внутри +foo/get_path.m файла и чем позвонить что-то вроде foo.get_path(), который возвращает путь к папке +foo.

4

Лучший способ для этого - объединить fileparts с mfilename('fullpath'). (Все примеры предполагают, исполняющий м-файл, содержащий эти заявления живет в /home/suever/code/stackoverflow.m)

mfiledir = fileparts(mfilename('fullpath')); 

    /home/suever/code 

Затем вы можете использовать fullfile построить любые пути, нужно от этого. Теперь, если у вас есть файл (data.mat), хранящийся в том же каталоге:

filename = fullfile(mfiledir, 'data.mat'); 

    /home/suever/code/data.mat 

Of если файл на самом деле в родительском каталоге.

filename = fullfile(mfiledir, '..', 'data.mat'); 

    /home/suever/data.mat 

Если вы хотите только родительский каталог, что м-файл, вы можете применить fileparts дважды, и только держать второй выход.

[~, reldir] = fileparts(fileparts(mfilename('fullpath'))); 

    code 

Я бы рекомендовал использовать полные пути в первых примерах, поскольку они полностью не зависят от текущего рабочего каталога пользователя.

+0

Спасибо за обмен. Единственное, но я не буду «рекомендовать использование абсолютных путей», если вы планируете запустить свой код на другом компьютере. То есть например, если вы не кодируете ядро ​​ОС - никогда не используйте абсолютные имена жестких ключей в любых пользовательских программах. –

+1

@YauhenYakimovich Я смущен. Здесь нет жестко закодированных путей. Пути вычисляются «на лету» на основе местоположения m-файла. * Absolute * Я говорю о том, что использует первый вариант, который я разместил, в отличие от последнего варианта, который я опубликовал. – Suever

+0

Правильно, после тщательной проверки - вы фактически говорите абсолютные пути, а не ** жестко закодированные абсолютные пути ** (что я неправильно понял). Виноват. –

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