aws_boto3 добавляет хэш к файлам, которые я загружаю из S3 с помощью python

#python #amazon-web-services #amazon-s3 #boto3

Вопрос:

В разделе s3 у меня есть список каталогов, и каждый из них содержит список файлов pkl, которые я хочу загрузить с той же структурой. Это мой код для этого :

  import boto3
 s3_conn = boto3.session.Session(profile_name=profile).client('s3')
 for each in range(len(keys)):
      key = keys[each]
      prefix = file_prefix[each]
      file_name = prefix   key.split('/')[-1]
     s3_conn.download_file(bucket_name, key, os.path.join(target_dir, file_name))
 
 

Это пример содержимого переменных:

 bucket_name = my_bucket
key = 'models/parent_dir/children_dir_1/model1.pkl'
target_dir = 'local_parent_dir/children_dir_1'
file_name = 'model1.pkl'
 

Проблема в том, что, когда я пытаюсь загрузить каталог и его содержимое, я обнаружил, что он добавляет суффикс к каждому файлу pkl, это похоже на хэш, и это приведет к ошибке для меня позже.
В этом и заключается ошибка :

   s3_conn.download_file(bucket_name, key, os.path.join(target_dir, file_name))
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/boto3/s3/inject.py", line 172, in download_file
    extra_args=ExtraArgs, callback=Callback)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/boto3/s3/transfer.py", line 307, in download_file
    future.result()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/futures.py", line 106, in result
    return self._coordinator.result()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/futures.py", line 265, in result
    raise self._exception
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/tasks.py", line 126, in __call__
    return self._execute_main(kwargs)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/tasks.py", line 150, in _execute_main
    return_value = self._main(**kwargs)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/download.py", line 571, in _main
    fileobj.seek(offset)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/utils.py", line 367, in seek
    self._open_if_needed()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/utils.py", line 350, in _open_if_needed
    self._fileobj = self._open_function(self._filename, self._mode)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/s3transfer/utils.py", line 261, in open
    return open(filename, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'local_parent_dir/children_dir_1/model1.pkl.e843bBf2'
 

Все имена проблем отсюда : ‘local_parent_dir/children_dir_1/model1.pkl.e843bBf2‘.

Может ли кто-нибудь рассказать мне о причине этой добавленной строки в путь к файлу и о том, как ее избежать.

Комментарии:

1. Этот случайный суффикс добавляется во время загрузки. Файл переименовывается после загрузки, чтобы удалить его. Как правило, вы должны избегать открытия частично загруженного файла, поэтому это не должно быть проблемой. Почему это для вас проблема?

2. os.makedirs(os.path.join(target_dir ‘/’))