我正在使用Telegram bot下载文件,我当前的代码看起来像这样:
def file_handler(Update, context: CallbackContext):
file = context.bot.getFile(Update.message.document.file_id)
print("file_id: " + str(Update.message.document.file_id))
file.download(custom_path='C:/Users/User/Desktop/python/projects/Telegram-Database/files')
def main():
updater = Updater(token, use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.document, file_handler))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
当我这样做的时候:
file.download()
它下载当前目录中的文件,但我想下载文件夹中的所有文件。所以我在这里查阅了文档:https://python-telegram-bot.readthedocs.io/en/stable/telegram.file.html,我确实可以设置自定义路径来下载该文件夹中的文件。但是,当我使用当前代码时,我得到一个权限错误:
with open(filename, 'wb') as fobj:
PermissionError: [Errno 13] Permission denied: 'C:/Users/User/Desktop/python/projects/Telegram-Database/files'
我不知道为什么。我试着重新创建文件夹并重新启动程序,但我总是得到同样的错误。我在Telegram聊天机器人中搜索了这个特定的错误,但什么也没有出现。你能帮帮我吗?
说明
您不能将文件夹视为文件,download
方法接受文件的路径。如文档中所述:
下载此文件。默认情况下,文件以Telegram报告的原始文件名保存在当前工作目录中。如果文件没有文件名,则使用文件ID作为文件名。如果提供了
custom_path
,它将被保存到该路径。如果定义了out,则使用out.write
方法将文件内容保存到该对象。
代码变更
你可以使用下面的代码:
custom_path='C:/Users/User/Desktop/python/projects/Telegram-Database/files'
custom_path='C:/Users/User/Desktop/python/projects/Telegram-Database/files/file1.txt'
完整代码def file_handler(Update, context: CallbackContext):
file = context.bot.getFile(Update.message.document.file_id)
print("file_id: " + str(Update.message.document.file_id))
file.download(custom_path='C:/Users/User/Desktop/python/projects/Telegram-Database/files/file1.txt')
def main():
updater = Updater(token, use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.document, file_handler))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()