【问题标题】:Python open says file doesn't exist when it doesPython打开时说文件不存在
【发布时间】:2017-04-13 23:49:52
【问题描述】:

我试图弄清楚为什么我的 Python 打开调用说文件不存在时它确实存在。如果我在浏览器中输入完全相同的文件 url,照片就会出现。

我得到的错误信息是:

No such file or directory: 'https://yhistory.s3.amazonaws.com/media/userphotos/1_1471378042183_cdv_photo_033.jpg'

Python代码是:

full_path_filename = 'https://' + settings.AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/' + file_name
fd_img = open(full_path_filename, 'r')

我想知道这个问题是否与 AWS S3 存储桶中的文件有关,但我能够连接到存储桶并列出其内容。

【问题讨论】:

  • 这是您机器上文件的名称,还是您尝试通过 Internet 访问它?
  • 如果您尝试通过 Internet 访问文件,您需要使用 urllib2requests 之类的模块
  • Python 代码正在我连接到互联网的笔记本电脑上运行。
  • open 函数用于打开可通过路径名访问的文件。 https://yhistory.s3.amazonaws.com/media/userphotos/1_1471378042183_cdv_photo_033.jpg 是 URL,而不是路径名,所以 open 不适合它。您必须明确使用模块中的函数来处理 Internet 上的请求

标签: python amazon-s3


【解决方案1】:

如果您尝试通过互联网打开文件,您应该执行以下操作(假设您使用的是 python 3):

import urllib.request
full_path_filename = 'https://' + settings.AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/' + file_name

file = urllib.request.urlopen(full_path_filename)

这将下载实际文件。您可以将file 用作另一个文件,如对象。

【讨论】:

  • Python requests 是一个功能强大的 HTTP 库,可以方便地处理诸如 cookie 和 SSL 之类的难题。有关如何解构 requests 响应对象的一些示例,请参阅 this question。此外,由于您使用的服务可能需要登录,您可能需要进行两项事务:一项提供您的登录凭据并获取会话 cookie,另一项用于获取文件。
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2014-08-29
相关资源
最近更新 更多