首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PermissionError:[WinError 5]访问被拒绝:‘文件夹名称/错误,而S3子文件夹文件下载窗口系统

PermissionError:[WinError 5]访问被拒绝:‘文件夹名称/错误,而S3子文件夹文件下载窗口系统
EN

Stack Overflow用户
提问于 2022-02-09 09:13:40
回答 1查看 348关注 0票数 0

我正在尝试将s3文件夹文件下载到我的windows系统中,并且在windows系统中执行我的python脚本时获得了权限错误。任何帮助都是非常感谢的.

代码语言:javascript
运行
复制
# 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)

下面出现的错误:

代码语言:javascript
运行
复制
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/'
EN

回答 1

Stack Overflow用户

发布于 2022-02-09 09:40:45

Create文件夹按钮在Amazon中使用时,它会创建一个“文件夹”。但是,亚马逊S3不使用文件夹。相反,它创建一个具有文件夹名称的零长度对象.在本例中,它创建了一个名为folder1/的对象。

但是,当您的代码试图以文件的形式下载此对象时,您的操作系统不喜欢创建一个以斜杠(/)结尾的文件。实际上,您不需要下载这个文件夹,因为代码已经在使用mkdir()创建目录。

因此,代码可以简单地跳过这些对象,如下所示:

代码语言:javascript
运行
复制
for obj in objs:
    if not obj.key.endswith('/'):
        # Your existing code here

或者,它可以跳过超过零长度的对象,其中包括:

代码语言:javascript
运行
复制
    if obj.size > 0:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71046770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档