如何给子文件夹路径到boto.client.file_download?

时间:2019-06-26 21:45:27

标签: python-3.x boto3

我正在使用boto3将文件从s3存储桶下载到本地系统。 我面临的问题是子文件夹。我无法传递文件夹的路径。

如果文件位于存储桶下,则文件将正确下载,但是对于子文件夹中的所有其他文件,我会收到以下错误:

/*Main Content*/

#menuTitle {
  padding: 25px;
  font-size: 2.5em;
  font-weight: bold;
  color: #000;
}

.secContents {
  position: relative;
  border-radius: 6px;
  padding: 0 15px;
}

.secHeading {
  padding: 10px;
}

.secBackTop {
  position: absolute;
  bottom: 0;
  right: 0;
  border-radius: 6px;
}

h1 {
  font-weight: 800;
}

p {
  color: #A9A9;
}

文件夹结构:

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />

<!--Main Content-->
<div class='container-fluid mx-auto'>
  <div id='menuTitle' class='text-center'>Our Menu</div>
  <div class='row d-flex mx-auto'>

    <!--Chicken Section-->
    <section class='col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4'>
      <div class='secContents bg-dark'>
        <h3 class='secHeading d-flex mx-auto justify-content-center'>Chicken</h3>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus congue lacus in luctus eleifend. Curabitur varius dictum lorem vel posuere. Curabitur blandit congue ante, eu dictum nisl rhoncus sit amet. Aenean cursus lorem at turpis consectetur faucibus.
          Sed ultrices vehicula odio, eu laoreet neque suscipit quis. Aliquam sit amet lectus aliquam, suscipit massa id, pharetra ex. Nulla nisi nunc, posuere eget dignissim eget, malesuada sollicitudin libero. Quisque scelerisque porttitor ultricies.
          Sed eget ex sed ante euismod malesuada eget fringilla arcu. Aenean egestas tincidunt gravida. Praesent non mattis nibh. Cras aliquet efficitur ex, non imperdiet felis feugiat ac. Aenean sagittis justo sit amet enim congue, nec finibus velit
          vestibulum. Cras eros ante, tincidunt facilisis euismod sit amet, interdum ac diam. Suspendisse facilisis hendrerit sapien non ornare. Nullam nec magna nunc. Aliquam nisi magna, vehicula eu tellus eget, aliquam dignissim erat. Ut ut ullamcorper
          nisi. Etiam iaculis fringilla lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eu tincidunt risus. Sed eu bibendum leo, vitae convallis elit. Donec feugiat tellus a velit suscipit
          condimentum. Sed ut augue sagittis, facilisis mauris at, fermentum turpis. Duis dictum libero id dolor porttitor porttitor. Quisque tempor orci eu purus mollis, id semper tortor fringilla. Aliquam auctor pretium turpis at sodales. Morbi dictum
          neque arcu, nec fringilla velit porttitor ac. Cras tristique vestibulum dolor, id cursus tortor ullamcorper sit amet. Nullam varius imperdiet risus vel volutpat. Aenean dapibus, urna sed lacinia suscipit, enim ligula bibendum orci, non mattis
          nulla nunc quis dolor. Nunc neque ante, tristique vulputate mi et, finibus commodo urna. Integer faucibus in nisi consequat auctor. Aliquam quis odio eget lorem tempus pellentesque. Nam scelerisque viverra neque et ullamcorper. In ipsum nisl,
          sagittis ut est quis, viverra venenatis tortor.
        </p>
        <a class='secBackTop btn btn-primary d-block d-md-none' href='#header-nav'>Back to Top</a>
      </div>
    </section>

    <!--Beef Section-->
    <section class='col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4'>
      <div class='secContents bg-dark'>
        <h3 class='secHeading d-flex mx-auto justify-content-center'>Beef</h3>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus congue lacus in luctus eleifend. Curabitur varius dictum lorem vel posuere. Curabitur blandit congue ante, eu dictum nisl rhoncus sit amet. Aenean cursus lorem at turpis consectetur faucibus.
          Sed ultrices vehicula odio, eu laoreet neque suscipit quis. Aliquam sit amet lectus aliquam, suscipit massa id, pharetra ex. Nulla nisi nunc, posuere eget dignissim eget, malesuada sollicitudin libero. Quisque scelerisque porttitor ultricies.
          Sed eget ex sed ante euismod malesuada eget fringilla arcu. Aenean egestas tincidunt gravida. Praesent non mattis nibh. Cras aliquet efficitur ex, non imperdiet felis feugiat ac. Aenean sagittis justo sit amet enim congue, nec finibus velit
          vestibulum. Cras eros ante, tincidunt facilisis euismod sit amet, interdum ac diam. Suspendisse facilisis hendrerit sapien non ornare. Nullam nec magna nunc. Aliquam nisi magna, vehicula eu tellus eget, aliquam dignissim erat. Ut ut ullamcorper
          nisi. Etiam iaculis fringilla lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eu tincidunt risus. Sed eu bibendum leo, vitae convallis elit. Donec feugiat tellus a velit suscipit
          condimentum. Sed ut augue sagittis, facilisis mauris at, fermentum turpis. Duis dictum libero id dolor porttitor porttitor. Quisque tempor orci eu purus mollis, id semper tortor fringilla. Aliquam auctor pretium turpis at sodales. Morbi dictum
          neque arcu, nec fringilla velit porttitor ac. Cras tristique vestibulum dolor, id cursus tortor ullamcorper sit amet. Nullam varius imperdiet risus vel volutpat. Aenean dapibus, urna sed lacinia suscipit, enim ligula bibendum orci, non mattis
          nulla nunc quis dolor. Nunc neque ante, tristique vulputate mi et, finibus commodo urna. Integer faucibus in nisi consequat auctor. Aliquam quis odio eget lorem tempus pellentesque. Nam scelerisque viverra neque et ullamcorper. In ipsum nisl,
          sagittis ut est quis, viverra venenatis tortor.
        </p>
        <a class='secBackTop btn btn-primary d-block d-md-none' href='#header-nav'>Back to Top</a>
      </div>
    </section>

    <!--Sushi Section-->
    <section class='col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4'>
      <div class='secContents bg-dark'>
        <h3 class='secHeading d-flex mx-auto justify-content-center'>Sushi</h3>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus congue lacus in luctus eleifend. Curabitur varius dictum lorem vel posuere. Curabitur blandit congue ante, eu dictum nisl rhoncus sit amet. Aenean cursus lorem at turpis consectetur faucibus.
          Sed ultrices vehicula odio, eu laoreet neque suscipit quis. Aliquam sit amet lectus aliquam, suscipit massa id, pharetra ex. Nulla nisi nunc, posuere eget dignissim eget, malesuada sollicitudin libero. Quisque scelerisque porttitor ultricies.
          Sed eget ex sed ante euismod malesuada eget fringilla arcu. Aenean egestas tincidunt gravida. Praesent non mattis nibh. Cras aliquet efficitur ex, non imperdiet felis feugiat ac. Aenean sagittis justo sit amet enim congue, nec finibus velit
          vestibulum. Cras eros ante, tincidunt facilisis euismod sit amet, interdum ac diam. Suspendisse facilisis hendrerit sapien non ornare. Nullam nec magna nunc. Aliquam nisi magna, vehicula eu tellus eget, aliquam dignissim erat. Ut ut ullamcorper
          nisi. Etiam iaculis fringilla lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eu tincidunt risus. Sed eu bibendum leo, vitae convallis elit. Donec feugiat tellus a velit suscipit
          condimentum. Sed ut augue sagittis, facilisis mauris at, fermentum turpis. Duis dictum libero id dolor porttitor porttitor. Quisque tempor orci eu purus mollis, id semper tortor fringilla. Aliquam auctor pretium turpis at sodales. Morbi dictum
          neque arcu, nec fringilla velit porttitor ac. Cras tristique vestibulum dolor, id cursus tortor ullamcorper sit amet. Nullam varius imperdiet risus vel volutpat. Aenean dapibus, urna sed lacinia suscipit, enim ligula bibendum orci, non mattis
          nulla nunc quis dolor. Nunc neque ante, tristique vulputate mi et, finibus commodo urna. Integer faucibus in nisi consequat auctor. Aliquam quis odio eget lorem tempus pellentesque. Nam scelerisque viverra neque et ullamcorper. In ipsum nisl,
          sagittis ut est quis, viverra venenatis tortor.
        </p>
        <a class='secBackTop btn btn-primary d-block' href='#header-nav'>Back to Top</a>
      </div>
    </section>
  </div>
</div>

我的代码:

botocore.exceptions.ClientError: An error occurred (404) when calling the HeadObject operation: Not Found

在提供子文件夹路径方面,将不胜感激任何输入/帮助。 boto的文档为here.

2 个答案:

答案 0 :(得分:0)

S3中没有“文件夹”的概念。您所看到的只是文件夹的直观表示。您只需要确保输入的密钥正确即可。但是这里的错误似乎是因为您正在写文件名/文件夹名而不是文件夹名/文件名

%s表示法已过时,我建议您使用format方法或仅使用+语法,例如:

s3_client.download_file('womply-data-science','{0}/{1}'.format(aws_f_dir, aws_f_name),'my_locat_file.txt')

答案 1 :(得分:0)

您提供的链接是指向示例而非实际文档的链接。函数download_file的实际文档的链接为here

对于您而言,正确的函数调用是:

s3_client.download_file('womply-data-science', 'test_dir/text_file.txt', 'my_local_file.txt')