Rastree el progreso de descarga del archivo S3 usando boto3 y devoluciones de llamada

Estoy tratando de descargar un archivo de texto desde S3 usando boto3.

Aquí está lo que he escrito.

class ProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = float(os.path.getsize(filename))
        self._seen_so_far = 0
        self._lock = threading.Lock()

    def __call__(self, bytes_amount):
        # To simplify we'll assume this is hooked up
        # to a single filename.
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = round((self._seen_so_far / self._size) * 100,2)
            LoggingFile('{} is the file name. {} out of {} done. The percentage completed is {} %'.format(str(self._filename), str(self._seen_so_far), str(self._size),str(percentage)))
            sys.stdout.flush()

y lo llamo usando

transfer.download_file(BUCKET_NAME,FILE_NAME,'{}{}'.format(LOCAL_PATH_TEMP , FILE_NAME),callback = ProgressPercentage(LOCAL_PATH_TEMP + FILE_NAME))

esto me está dando un error de que el archivo no está presente en la carpeta. Aparentemente, cuando ya tengo un archivo con este nombre en la misma carpeta, funciona, pero cuando descargo un archivo nuevo, se produce un error.

¿Qué corrección debo hacer?

Respuestas a la pregunta(5)

Su respuesta a la pregunta