Я пытаюсь загрузить некоторые активы в свою программу, которые у меня есть в папке «Графика», которая находится внутри папки «Змея», которая находится внутри папки «Проекты», которая находится внутри папки «Python». Однако внутри этой папки «Python» есть еще одна папка с именем «HelloWorld».
Я пытаюсь загрузить некоторые активы в программу, которую я запускаю в «Змее», и Python ищет активы в папке «HelloWorld» (где я хранил свои файлы Python).
Я получаю сообщение об ошибке:
FileNotFoundError: No file 'Projects/Snake/Graphics/apple.png' found in working directory 'C:\Users\35192\OneDrive - WC\Desktop\Python\HelloWorld'
Я считаю, что для этого мне нужно изменить каталог по умолчанию для кода vs. Я изменил каталог по умолчанию для командной строки, и это ничего не сделало. Возможно, это связано с тем, что питон, который я запускаю в командной строке, отличается от того, который используется в коде vs (?)
Как я могу это исправить?
Заранее спасибо.
Редактировать:
Вот как я сейчас загружаю изображение:
apple = pygame.image.load('Projects\Snake\Graphics\apple.png').convert_alpha()
@Matthias, да, это правильно, извините
Вам не нужно менять каталог по умолчанию. Просто загрузите из полного каталога. Это должно выглядеть примерно так: "C:\Users\...\Python\Snake\Graphics\apple.png".
Я получил синтаксическую ошибку: SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
\U
запускает escape-последовательность юникода. Вам нужно либо использовать необработанную строку (r"C:\Users\..."
), либо удвоить обратную косую черту, чтобы избежать их, либо использовать прямую косую черту (да, это работает даже в Windows).
Используйте pathlib
для создания пути к вашим изображениям. Вам нужно будет добавить import pathlib
к вашему коду.
pathlib.Path(__file__)
даст вам путь к текущему файлу. pathlib.Path(__file__).parent
даст вам папку. Теперь вы можете построить путь с помощью оператора /
.
Попробуйте следующий код и проверьте вывод.
import pathlib
print(pathlib.Path(__file__))
print(pathlib.Path(__file__).parent)
print(pathlib.Path(__file__).parent / 'Grahics' / 'apple.png')
Теперь вы сможете переместить весь проект в совершенно другую папку без необходимости корректировать какой-либо код.
Ваш пример кода выглядит так: apple = pygame.image.load('Projects\Snake\Graphics\apple.png').convert_alpha()
Если вы импортируете pathlib
, вы можете заменить его динамическим подходом:
path_to_image= pathlib.Path(__file__).parent / 'Grahics' / 'apple.png'
apple = pygame.image.load(path_to_image).convert_alpha()
Я совершенно уверен, что pygame может работать с путем из pathlib. Если нет, то вам нужно преобразовать путь в строку вручную.
apple = pygame.image.load(str(path_to_image)).convert_alpha()
Как мне написать это, когда я импортирую активы?
Как вы их загружаете сейчас? Пожалуйста, добавьте код к вопросу, потому что он будет нечитаемым в комментариях.
я добавил это
Спасибо, это не сработало. Я получил ошибку: pygame.error: No video mode has been set
Это другая ошибка и не имеет ничего общего с путем. На самом деле это показывает, что изображение можно найти, но настройка pygame не завершена. Простого pygame.display.set_mode()
перед загрузкой изображений и после pygame.init()
может быть достаточно.
Я решил это. По сути, я установил режим после того, как импортировал изображение, и я должен был сделать это позже. Благодарю вас! хорошего дня
Я не пользовался pygame несколько лет, но рад, что вспомнил что-то из старых дней. А по поводу "хорошего дня": в моей локации приближается полночь. ;)
Я думаю, что самый простой способ - сначала увидеть свой активный каталог, просто набрав
pwd
, а затем вы можете просто изменить каталог с помощью cd("C:/path/to/location")
, помните, что вам нужно использовать обратную косую черту, или просто используйте следующую библиотеку:
import os
os.chdir("C:/path/to/location")
Как сообщил pydragon, вы также можете импортировать его, просто указав путь к функции импорта.
Я стараюсь избегать изменения глобального состояния из программы, если мне это не нужно.
os.chdir
изменяет текущий рабочий каталог исполняющего его процесса Python. Как только вы выйдете из процесса python и вернетесь к процессу оболочки, который его породил. рабочий каталог этого процесса не будет затронут. Пожалуйста, поправьте меня, если я ошибаюсь.
Верно. Но что было бы, если бы все использовали os.chdir
и полагались на результат? Представьте, что произойдет, если вы импортируете 3 модуля, и каждый из этих модулей попытается установить для текущего рабочего каталога другой путь. Последний выиграет, а остальные больше не будут использовать правильную папку. os.chdir
кажется легким и простым решением, но оно доставит вам ад.
В своем вопросе вы часто используете термин «Файлы», но, поскольку описание не имеет смысла, я думаю, вы имеете в виду «Папки». Не могли бы вы уточнить это?