#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 ‘/’))