我试图读取CSV文件从私人S3桶到熊猫数据帧:
df = pandas.read_csv('s3://mybucket/file.csv')
我可以从公共存储桶中读取文件,但从私有存储桶中读取文件会导致HTTP 403:禁止错误。
我已经使用aws配置配置了AWS凭据。
我可以使用boto3从私人存储桶下载文件,boto3使用aws凭据。似乎我需要配置pandas以使用AWS凭据,但不知道如何配置。
熊猫0.22及以上版本的更新:
如果已经安装了s3fs(pip install s3fs
),则可以直接从s3路径读取文件,而无需任何导入:
data = pd.read_csv('s3:/bucket....csv')
稳定的医生
更新为熊猫0.20.1
熊猫现在使用s3fs处理s3连接。链接
熊猫现在使用s3fs处理S3连接。这不应该破坏任何代码。但是,由于s3fs不是必需的依赖项,因此需要单独安装它,就像之前版本的pandas中的boto一样。
import os
import pandas as pd
from s3fs.core import S3FileSystem
# aws keys stored in ini file in same path
# refer to boto3 docs for config settings
os.environ['AWS_CONFIG_FILE'] = 'aws_config.ini'
s3 = S3FileSystem(anon=False)
key = 'path\to\your-csv.csv'
bucket = 'your-bucket-name'
df = pd.read_csv(s3.open('{}/{}'.format(bucket, key), mode='rb'))
# or with f-strings
df = pd.read_csv(s3.open(f'{bucket}/{key}', mode='rb'))
熊猫使用boto
(不是boto3
)内的read_csv
。您也许可以安装boto并使其正常工作。
boto和python 3.4.4/python3存在一些问题。5.1. 如果你在这些平台上,在这些平台被修复之前,你可以使用boto 3
import boto3
import pandas as pd
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='bucket', Key='key')
df = pd.read_csv(obj['Body'])
那个obj
有一个. read
方法(返回字节流),这对于熊猫来说已经足够了。
有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?
问题内容: 我这样做是读取了S3存储桶中的文件名 现在,我需要获取文件的实际内容,类似于。什么是最好的方法? 问题答案: boto3提供了一种资源模型,该资源模型使诸如迭代对象之类的任务变得更加容易。不幸的是,StreamingBody不提供或。
问题内容: 我正在尝试使用AWS S3存储桶中的文件进行读取 我已经能够使用节点aws-sdk下载和上传文件,但是我对如何简单地读取文件并解析内容感到困惑。 这是我从s3中读取文件的示例: 问题答案: 您有两种选择。您可以包括一个回调作为第二个参数,该参数将与任何错误消息和对象一起调用。该示例直接来自AWS文档: 或者,您可以将输出转换为流。AWS文档中还有一个示例:
使用Boto3,python脚本从S3桶中下载文件以读取它们,并将下载文件的内容写入名为的文件。 我的问题是,一旦脚本使用AWS Lambda函数,它将如何以相同的方式工作?
问题内容: 我有以下代码 而且有效。但是首先将文件下载到当前目录的问题。是否可以直接在RAM中读取文件并将其解码为图像? 问题答案: 我建议使用io模块直接将文件读取到内存中,而根本不必使用临时文件。 例如: 如果您的数据是二进制的,也可以使用。
我正在使用Spring引导连接到谷歌云存储。 我能够连接到一个文件,并从谷歌云存储桶中读取内容。 但是我不能得到谷歌云存储桶中所有文件的列表。 请帮帮我。 这很有效 这不工作。 有什么原因吗?