Относительный путь до файла на Python

Хочу добавить относительный путь в консольную программу на Python. (для возможности портирования на другие ПК). Пишет "No such file or directory". Абсолютный путь работает. Пытался каким-то образом изменить активную директорию, но не смог. '''

def download_fiels():
    with open("../wordbooks/russian_nouns.txt", encoding='utf-8') as file:
        WORD_LIST = [row.strip() for row in file]

    with open("../wordbooks/russian_pril.txt", encoding='utf-8') as file:
        QUALITY_LIST = [row.strip() for row in file]

    with open("../wordbooks/russian_imena.txt", encoding='utf-8') as file:
        NAME_LIST = [row.strip() for row in file]
    return WORD_LIST, QUALITY_LIST, NAME_LIST

'''


Ответы (3 шт):

Автор решения: Sergey K.

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

import os
basedir = os.path.abspath(os.getcwd())

Предлагаю в данном случае сохранить путь до каталога с ресурсами, у вас это "wordbooks", который лежит внутри каталога выше уровнем. Способ велосипедистый.

wordbooks_dir = basedir[:-(len(basedir.split('\\')[-1]) + 1)]

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

open(f"{wordbooks_dir}/russian_nouns.txt", encoding='utf-8')

Дополнение: Обнаружил некостыльный способ обратиться к родительскому каталогу.

workbooks_dir = os.path.abspath(os.path.join(basedir, '..'))
open(os.path.join(wordbooks_dir, '/russian_nouns.txt', encoding='utf-8')
→ Ссылка
Автор решения: alex6712

В питоне есть зарезервированная переменная __file__, в которую записывается путь до загруженного модуля. В данном случае её можно использовать таким образом:

import os

with open(os.path.dirname(os.path.abspath(__file__))
          + "/wordbooks/russian_nouns.txt", "r", encoding='utf-8') as file:
    # код

Так Вы сможете вызывать исполняемый файл вашей программы из любой директории.

→ Ссылка
Автор решения: Stanislav Nikulin

У меня вышеописанные способы не сработали, нашел универсальней и адаптированней для создания dataframe сразу:

import pandas as pd
import os

directory_path = os.path.dirname(os.path.abspath(__file__))

file_name = pd.read_csv(os.path.join(directory_path, "file_name.csv"))
→ Ссылка