Telethon python一直在重新下载照片

Telethon python一直在重新下载照片,python,telegram,telethon,Python,Telegram,Telethon,在过去的半个小时里,我一直在挠头,但我无法纠正这个错误,让我解释一下。 基本上,我正在尝试做的是制作一个简单的脚本,可以下载过去6天的文本和照片,该脚本在所有方面都可以正常工作,只是当我重新运行它时,它会再次下载照片,最终得到重复的图像 代码如下: from datetime import timedelta from datetime import datetime from telethon import TelegramClient date = datetime.now() + ti

在过去的半个小时里,我一直在挠头,但我无法纠正这个错误,让我解释一下。 基本上,我正在尝试做的是制作一个简单的脚本,可以下载过去6天的文本和照片,该脚本在所有方面都可以正常工作,只是当我重新运行它时,它会再次下载照片,最终得到重复的图像

代码如下:

from datetime import timedelta
from datetime import datetime
from telethon import TelegramClient


date = datetime.now() + timedelta(-6)
api_id =  123
api_hash = 'XXX'
client = TelegramClient('SESSION', api_id, api_hash)

#Blank files have been already created
async def main():
    with open("downloadedids.txt", "r+") as archivio, open("messagesaved.txt", "r+") as scaricare:
        async for message in client.iter_messages('test', offset_date=date, reverse=True): ##I want to download only messages 6 days ago to now
            if str(message.id) not in str(archivio.read()):
                if (message.photo):
                    await message.download_media("Include")
                scaricare.write(str(message.text))
                archivio.write(str(message.id) + "\n")


with client:
    client.loop.run_until_complete(main())

可能问题与异步有关?

它正在再次下载,因为您告诉它!也许您想对现有文件进行校验和,如果它匹配,就不保留第二个?

假设我下载了邮件和照片,并将它们的ID保存在downloadedds.txt文件中,下次运行脚本时,请执行此条件检查:```如果str(message.ID)不在str(archivio.read()中):``应该避免重新下载照片。@jimmy23x是的,那会有用的。也许有更好的方法,但这很简单,如果您不指定下载文件的路径,Telethon将自动生成一个新路径。如果是这种情况,它将不会覆盖文件,因为您可能会丢失数据。相反,它确保新文件名是唯一的。告诉它要使用的文件名,您将停止获取重复的文件名。仍然不起作用,我尝试了以下操作:等待消息。下载\u媒体(r“folder\filename”+str(message.id)),但当我重新运行它时,我会得到一张重复的照片,例如filename3300.png,然后filename3300(1)。pngyu还必须提供扩展名,否则它仍然会生成一个名称(添加扩展名并确保它不会覆盖)。您可以通过
m.file.ext
获得此结果。现在它可以工作了,但是我注意到执行时间与重新下载并替换照片的时间相同,因为我正在执行此检查:如果str(message.id)不在str(archivio.read())中:它甚至不应该尝试下载新照片……这是预期的行为。如果您传递一个显式文件名,它将下载到其中,甚至在需要时覆盖文件。只需检查您的代码中不存在它,并避免下载。