Как обратиться к относительным путям ресурсов при работе с репозиторием кода

При выполнении медицинской обработки изображений, вероятно, что Вы выделяете большие блоки за один раз (512x512, изображения на 2 байта на пиксель). Фрагментация укусит Вас при выделении меньших объектов между выделения буферов изображения.

Запись пользовательского средства выделения не обязательно трудна для этого конкретного примера использования. Можно использовать стандартное средство выделения C++ для Объекта изображения, но для пиксельного буфера можно использовать пользовательское выделение, которое все организовано в Объекте изображения. Вот быстрая и грязная схема:

  • Использование статический массив структур, каждая структура имеет:
    • блок тела А памяти, которая может содержать изображения N - разделение на блоки, поможет управлять фрагментацией - пробуют начальную букву N приблизительно 5
    • массив параллели А указания bools, используется ли соответствующее изображение
  • , Чтобы выделить, искать массив пустой буфер и установить его флаг
    • , Если ни одно найденное, добавьте новую структуру в конец массива
  • Для освобождения, найдите соответствующий буфер в массиве (массивах) и очистите булев флаг

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

179
задан Paul Roub 6 September 2019 в 22:27
поделиться

4 ответа

Попробуйте использовать имя файла относительно текущего пути к файлам. Пример для './my_file':[1277 providedIn Python 3.4+ вы также можете использовать pathlib :

fn = pathlib.Path(__file__).parent / 'my_file'
240
ответ дан 23 November 2019 в 20:12
поделиться
import os
cwd = os.getcwd()
path = os.path.join(cwd, "my_file")
f = open(path)

Вы также пытаетесь нормализовать свой cwd с использованием os.path.abspath (os.getcwd ()) . Подробнее здесь .

5
ответ дан 23 November 2019 в 20:12
поделиться

Я часто использую что-то похожее на это:

import os
DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), 'datadir'))

# if you have more paths to set, you might want to shorten this as
here = lambda x: os.path.abspath(os.path.join(os.path.dirname(__file__), x))
DATA_DIR = here('datadir') 

pathjoin = os.path.join
# ...
# later in script
for fn in os.listdir(DATA_DIR):
    f = open(pathjoin(DATA_DIR, fn))
    # ...

Переменная

__file__

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

  • путь является абсолютным, но все же относительным
  • проект все еще может быть развернут в относительном контейнере

Но вам нужно следить за совместимостью платформ - Windows 'os.pathsep отличается чем UNIX.

13
ответ дан 23 November 2019 в 20:12
поделиться

Вы можете использовать сборку в переменной __ file __ . Он содержит путь к текущему файлу. Я бы реализовал getBaseOfProject в модуле в корне вашего проекта. Там я бы получил часть пути __ file __ и вернул бы его. Затем этот метод можно использовать везде в вашем проекте.

2
ответ дан 23 November 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: