@Qayin

Как указать путь к файлу?

@bot.message_handler(content_types=["text"])
def send_photo(message):
    if message.text == "Картиночка":
        photo = open('C:\Projects\telebot_test_functions\photo' + random.choice(os.listdir('photo')), 'rb')
        bot.send_photo(message.chat.id, photo)


Вот сама ошибка:
File "c:\Projects\telebot_test_functions\testbot.py", line 25, in send_photo
photo = open('C:\Projects\telebot_test_functions\photo' + random.choice(os.listdir('photo')), 'rb')
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'photo'
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@PavelMos
Это в виндах ?
Слеш в пути должен быть двойной + в конце, если добавляется имя файла, перед ним нужен слеш
C:\\Projects\\telebot_test_functions\\photo
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
shabelski89
@shabelski89
engineer
@bot.message_handler(content_types=["text"])
def send_photo(message):
    if message.text == "Картиночка":
        img_dir = r'C:\Projects\telebot_test_functions\photo'
        images = [os.path.join(img_dir, img) for img in os.listdir(img_dir) if img.endswith('png')]
        random_img = random.choice(images)
        if random_img:
            photo = open(random_img, 'rb')
            bot.send_photo(message.chat.id, photo)
        else:
            bot.send_photo(message.chat.id, "нет картинки")
Ответ написан
Комментировать
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Рекомендую либо экранировать обратные слэши (как в моём примере), либо заменить их на прямые слэши (типа C:/Mydir/myfile.txt).
Кроме того, убедитесь, что после пути к папке photo в вашем варианте стоит слэш; по-моему его там нет.

Кроме того, конструкция random.choice(os.listdir('photo')) предполагает, что папка photo находится в папке, которая в данный момент для вашего скрипта основная. Но это может быть неожиданно не папка проекта.
Рекомендую, например, сделать по-другому:
from pathlib import Path

project_dir = Path('C:\\Projects\\telebot_test_functions\\')
photo_dir = project_dir / 'photo' 
photo = open(random.choice([*photo_dir.iterdir()]), 'rb')
Ответ написан
@Qayin Автор вопроса
Спасибо всем большое за решения - оказалось все проще -
photo = open('C:\\Projects\\telebot_test_functions\\photo'\\ + random.choice(os.listdir('photo')), 'rb') - эту строку
photo = open('C:\\Projects\\telebot_test_functions\\photo' + random.choice(os.listdir('C:\\Projects\\telebot_test_functions\\photo'')), 'rb') - исправить на это
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы