使用open()读取公有AWS S3桶txt文件报FileNotFoundError如何解决?
问题原因
Python内置的open()函数仅支持读取本地文件系统中的文件,无法直接解析HTTP/HTTPS协议的S3公网访问链接,因此会触发路径不存在的报错。
修复方案
方案1:使用requests库直接获取公开文件(最简便)
适合仅需要读取单个公开文件的场景,代码示例:
import requests # 替换为你的S3文件公开访问链接 s3_file_url = "替换为实际的S3公网访问地址" response = requests.get(s3_file_url) # 校验请求是否成功 response.raise_for_status() # 读取txt文本内容 txt_content = response.text
方案2:使用AWS官方SDK boto3读取
适合需要频繁操作S3资源的场景,公有桶可配置匿名访问无需传入AWS凭证,代码示例:
import boto3 from botocore import UNSIGNED from botocore.config import Config # 初始化匿名S3客户端 s3_client = boto3.client('s3', config=Config(signature_version=UNSIGNED)) # 替换为实际的桶名称、文件在桶内的路径 bucket_name = "你的S3桶名" file_key = "txt文件在桶内的完整路径,例如doc/test.txt" resp = s3_client.get_object(Bucket=bucket_name, Key=file_key) txt_content = resp['Body'].read().decode('utf-8')
注意事项
- 使用requests方案时,传入的链接必须是S3对象的完整公网HTTP/HTTPS链接,不能使用
s3://开头的资源标识,这类标识需要用boto3解析 - 如果后续需要读取私有桶文件,只需配置好本地AWS凭证,移除boto3客户端的UNSIGNED配置即可
内容的提问来源于stack exchange,提问作者m23
相关产品推荐
相关产品推荐

