FileNotFoundError: [Errno 2] Нет такого файла или каталога: './{File_name}.py'

Итак, я делаю IDE на python как забавный проект, но у меня есть проблема со списком каталогов файлов, например, в коде vs (дерево файлов). это дает мне FileNotFoundError: [Errno 2] No such file or directory: './file.py' насколько я понимаю, это происходит потому, что он ищет файл в каталоге, где находится основной файл, но я не знаю, как это исправить, вот код

########################################
#TREE
########################################
file_tree = Frame(root)
file_tree.pack(side='left', fill=Y, expand=NO)
def open_dir():
    for i in tree.get_children():
        tree.delete(i)
    path = askdirectory()
    abspath = os.path.abspath(path)
    root_node = tree.insert('', 'end', text=abspath, open=True)
    process_directory(root_node,abspath)

def process_directory( parent, path):

        for p in os.listdir(path):
            abspath = os.path.join(path, p)
            isdir = os.path.isdir(abspath)
            oid = tree.insert(parent, 'end', text=p, open=False)
            if isdir:
                process_directory(oid, abspath)

def Open_file_from_list_box(value):
    global file
    item_id = tree.selection()
    file = tree.item(item_id, 'text') # get the filename from 'text' option
    filepath = os.path.join(value,file)     
    editArea.delete(1.0,END)
    with open(filepath,"r") as f:
        editArea.insert(1.0,f.read())

tree = ttk.Treeview(file_tree)
tree.pack(expand=YES,fill=BOTH)
path = '.'
tree.heading('#0', text=path, anchor='w')
abspath = os.path.abspath(path)
root_node = tree.insert('', 'end', text=abspath, open=True)
process_directory(root_node, abspath)

tree.bind("<<TreeviewSelect>>",lambda event=None:Open_file_from_list_box(path))

Я использую Tkinter для графического интерфейса.

На самом деле этот код из переполнения стека, но я не помню, где я только что модифицировал его для своих нужд.

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

buran 18.04.2023 09:33

Ваш пример не запускается. Пожалуйста, предоставьте работающий пример. См. минимальный воспроизводимый пример.

Bryan Oakley 18.04.2023 18:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

filepaths = {}

def process_directory(parent, path):
    for p in os.listdir(path):
        abspath = os.path.join(path, p)
        isdir = os.path.isdir(abspath)
        oid = tree.insert(parent, 'end', text=p, open=False)
        filepaths[oid] = abspath  # save the full pathname
        if isdir:
            process_directory(oid, abspath)

def Open_file_from_list_box(value):
    global file
    try:
        item_id = tree.selection()[0]
        filepath = filepaths[item_id] # get the full pathname
        editArea.delete(1.0,END)
        with open(filepath,"r") as f:
            editArea.insert(1.0,f.read())
    except Exception as ex:
        print(ex.__class__.__name__, ex)

TypeError: ожидается объект str, bytes или os.PathLike, а не кортеж. Могу ли я сохранить его как str? потому что мне нужна str в функции save_as

some_dude 18.04.2023 10:15

В вашем опубликованном коде нет функции save_as. Вы должны поднять другой вопрос по этому вопросу. Мой ответ касается только проблемы с файлом, который не найден.

acw1668 18.04.2023 10:18

Другие вопросы по теме