我正在尝试将s3文件夹文件下载到我的windows系统中,并且在windows系统中执行我的python脚本时获得了权限错误。任何帮助都是非常感谢的.
# creating folder but no data.
import boto3
import os
from pathlib import Path
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucketname')
key = 'foldername1'
objs = list(bucket.objects.filter(Prefix=key))
for obj in objs:
# print(obj.key)
# remove the file name from the object key
obj_path = os.path.dirname(obj.key)
# create nested directory structure
Path(obj_path).mkdir(parents=True, exist_ok=True)
# save file with full path locally
bucket.download_file(obj.key, obj.key)
下面出现的错误:
Traceback (most recent call last):
File "C:\MSA\EO projects\FEB 2022 WORKS\REMOTE AWZ\d6.py", line 23, in <module>
bucket.download_file(obj.key, obj.key)
File "C:\Program Files\Python37\lib\site-packages\boto3\s3\inject.py", line 246, in bucket_download_file
ExtraArgs=ExtraArgs, Callback=Callback, Config=Config)
File "C:\Program Files\Python37\lib\site-packages\boto3\s3\inject.py", line 172, in download_file
extra_args=ExtraArgs, callback=Callback)
File "C:\Program Files\Python37\lib\site-packages\boto3\s3\transfer.py", line 307, in download_file
future.result()
File "C:\Program Files\Python37\lib\site-packages\s3transfer\futures.py", line 106, in result
return self._coordinator.result()
File "C:\Program Files\Python37\lib\site-packages\s3transfer\futures.py", line 265, in result
raise self._exception
File "C:\Program Files\Python37\lib\site-packages\s3transfer\tasks.py", line 126, in __call__
return self._execute_main(kwargs)
File "C:\Program Files\Python37\lib\site-packages\s3transfer\tasks.py", line 150, in _execute_main
return_value = self._main(**kwargs)
File "C:\Program Files\Python37\lib\site-packages\s3transfer\download.py", line 601, in _main
osutil.rename_file(fileobj.name, final_filename)
File "C:\Program Files\Python37\lib\site-packages\s3transfer\utils.py", line 273, in rename_file
rename_file(current_filename, new_filename)
File "C:\Program Files\Python37\lib\site-packages\s3transfer\compat.py", line 25, in rename_file
os.remove(new_filename)
PermissionError: [WinError 5] Access is denied: 'foldername1/'
发布于 2022-02-09 09:40:45
当Create文件夹按钮在Amazon中使用时,它会创建一个“文件夹”。但是,亚马逊S3不使用文件夹。相反,它创建一个具有文件夹名称的零长度对象.在本例中,它创建了一个名为folder1/
的对象。
但是,当您的代码试图以文件的形式下载此对象时,您的操作系统不喜欢创建一个以斜杠(/
)结尾的文件。实际上,您不需要下载这个文件夹,因为代码已经在使用mkdir()
创建目录。
因此,代码可以简单地跳过这些对象,如下所示:
for obj in objs:
if not obj.key.endswith('/'):
# Your existing code here
或者,它可以跳过超过零长度的对象,其中包括:
if obj.size > 0:
https://stackoverflow.com/questions/71046770
复制相似问题