Python ищет изображение в неправильном каталоге

Я пытаюсь загрузить некоторые активы в свою программу, которые у меня есть в папке «Графика», которая находится внутри папки «Змея», которая находится внутри папки «Проекты», которая находится внутри папки «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 09.04.2022 21:52

@Matthias, да, это правильно, извините

António Rebelo 09.04.2022 21:52
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
26
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам не нужно менять каталог по умолчанию. Просто загрузите из полного каталога. Это должно выглядеть примерно так: "C:\Users\...\Python\Snake\Graphics\apple.png".

Я получил синтаксическую ошибку: SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

António Rebelo 09.04.2022 22:02
\U запускает escape-последовательность юникода. Вам нужно либо использовать необработанную строку (r"C:\Users\..."), либо удвоить обратную косую черту, чтобы избежать их, либо использовать прямую косую черту (да, это работает даже в Windows).
Matthias 09.04.2022 22:14
Ответ принят как подходящий

Используйте 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()

Как мне написать это, когда я импортирую активы?

António Rebelo 09.04.2022 22:02

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

Matthias 09.04.2022 22:04

я добавил это

António Rebelo 09.04.2022 22:06

Спасибо, это не сработало. Я получил ошибку: pygame.error: No video mode has been set

António Rebelo 09.04.2022 22:15

Это другая ошибка и не имеет ничего общего с путем. На самом деле это показывает, что изображение можно найти, но настройка pygame не завершена. Простого pygame.display.set_mode() перед загрузкой изображений и после pygame.init() может быть достаточно.

Matthias 09.04.2022 22:17

Я решил это. По сути, я установил режим после того, как импортировал изображение, и я должен был сделать это позже. Благодарю вас! хорошего дня

António Rebelo 09.04.2022 22:26

Я не пользовался pygame несколько лет, но рад, что вспомнил что-то из старых дней. А по поводу "хорошего дня": в моей локации приближается полночь. ;)

Matthias 09.04.2022 22:28

Я думаю, что самый простой способ - сначала увидеть свой активный каталог, просто набрав pwd, а затем вы можете просто изменить каталог с помощью cd("C:/path/to/location"), помните, что вам нужно использовать обратную косую черту, или просто используйте следующую библиотеку:

import os
os.chdir("C:/path/to/location")

Как сообщил pydragon, вы также можете импортировать его, просто указав путь к функции импорта.

Я стараюсь избегать изменения глобального состояния из программы, если мне это не нужно.

Matthias 09.04.2022 22:33
os.chdir изменяет текущий рабочий каталог исполняющего его процесса Python. Как только вы выйдете из процесса python и вернетесь к процессу оболочки, который его породил. рабочий каталог этого процесса не будет затронут. Пожалуйста, поправьте меня, если я ошибаюсь.
Pygin 09.04.2022 22:40

Верно. Но что было бы, если бы все использовали os.chdir и полагались на результат? Представьте, что произойдет, если вы импортируете 3 модуля, и каждый из этих модулей попытается установить для текущего рабочего каталога другой путь. Последний выиграет, а остальные больше не будут использовать правильную папку. os.chdir кажется легким и простым решением, но оно доставит вам ад.

Matthias 09.04.2022 22:47

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