Итак, я делаю 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 для графического интерфейса.
На самом деле этот код из переполнения стека, но я не помню, где я только что модифицировал его для своих нужд.
Ваш пример не запускается. Пожалуйста, предоставьте работающий пример. См. минимальный воспроизводимый пример.
Вы можете использовать словарь для хранения полного пути к файлам, используя идентификатор элемента в качестве ключа:
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
В вашем опубликованном коде нет функции save_as. Вы должны поднять другой вопрос по этому вопросу. Мой ответ касается только проблемы с файлом, который не найден.
Относительный путь относится к текущему рабочему каталогу, а не к каталогу, в котором находится файл. Конечно, они могут быть одним и тем же