#python #python-3.x #error-handling
Вопрос:
Я пытаюсь открыть тестовую фотографию в python, чтобы загрузить фотографию с помощью API imgur. Я нашел в Интернете руководства о том, как это сделать с помощью javascript, но я пытаюсь изучить python, поэтому буду признателен за помощь на этом языке.
Ошибка, которую я получаю, заключается в том, что
FileNotFoundError: [Errno 2] No such file or directory: '..\media\test.jpg'
Я подозреваю, что причина ошибки связана с моим подключением к test.jpg
файлу, но я, похоже, не могу найти правильный способ добраться до этого файла. Я загрузил свой пример кода ниже, и он также находится в сообщении на github, связанном ЗДЕСЬ.
Различные попытки, которые я предпринял, чтобы вызвать этот файл, включают следующее:
'image': b64encode(open(r'..mediatest.jpg', 'rb').read())
'image': open(r'..mediatest.jpg', 'rb').read()
'image': open('..mediatest.jpg', 'rb').read()
'image': open('..\media\test.jpg', 'rb').read()
'image': open(r'..\media\test.jpg', 'rb').read()
'image': open('../media/test.jpg', 'rb').read()
Я также попытался поместить test.jpg
фотографию в ту же папку, что и скрипт python, но, к сожалению, это тоже не сработало.
Код, который я использую:
from base64 import b64encode
import json
import requests
import config
client_id = config.IMGUR_CLIENT_ID
# headers = ['Authorization'] = f'Client-ID {client_id}'
headers = {"Authorization": f'Client-ID {client_id}'}
api_key = config.IMGUR_CLIENT_SECRET
url = "https://api.imgur.com/3/upload.json"
# print(r'..mediatest.jpg')
j1 = requests.post(
url,
headers = headers,
data = {
'key': api_key,
#'image': b64encode(open(r'..mediatest.jpg', 'rb').read()),
'image': open(r'..mediatest.jpg', 'rb').read(),
'type': 'base64',
'name': 'test.jpg',
'title': 'Picture no. 1'
}
)
Изображение структуры файла:
Комментарии:
1. сначала попробуйте использовать
/full/path/to/image.jpg
вместо использования../
. Затем вы должны проверитьCurrent Working Folder
os.gecwd()
— потому что код может запускаться в другой папке, чем вы ожидаете, а затем../
может привести к другой папке, чем вы ожидаете. Поэтому он может попытаться загрузить из папки, в которой нет изображений. И, наконец, вы можете попытатьсяBASE = os.path.dirname(os.path.abspath(__file__))
получить папку со скриптом, а затем использоватьos.path.join(BASE, r'..mediatest.jpg')
ее для создания полного пути к изображению. Эту проблему и решение вы должны найти в сотнях вопросов по Stackoverflow.2. я ценю помощь, но не смог разобраться в этом так, как вы рекомендуете, в итоге я сохранил фотографию в нужном месте и использовал это же место для извлечения.
3. мой метод не работает, потому что (как показано в вашем ответе ниже) у вас проблема в совершенно другом месте. У вас просто не было образа на диске.
Ответ №1:
Не смог понять этого, поэтому я использовал приведенный ниже код для сохранения в папке на моем диске C. Мне не нужно хранить переменную где-либо, так как файл может быть перезаписан каждый раз, когда выполняется код.
file_location = urllib.request.urlretrieve(url, r'C:temptest.jpg')
Комментарии:
1. Я этого не понимаю — в вопросе вы пытались загрузить изображение, но здесь вы загружаете изображение. Так что ваш вопрос был совершенно неправильным. Вы не смогли загрузить файл, потому что у вас его не было.