请原谅我的困惑,但我已经阅读了关于python中的seek()函数的文档(必须使用它之后)虽然它对我有所帮助,但我仍然对它的实际含义有点困惑,任何解释都很多谢谢,谢谢.
我正在尝试使用 AWS Lambda 将 csv 文件写入 S3 存储桶,为此我使用了以下代码:
data=[[1,2,3],[23,56,98]]
with open("s3://my_bucket/my_file.csv", "w") as f:
f.write(data)
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
[Errno 2] No such file or directory: u's3://my_bucket/my_file.csv': IOError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 51, in lambda_handler
with open("s3://my_bucket/my_file.csv", "w") as f:
IOError: [Errno 2] No such file or directory: u's3://my_bucket/my_file.csv'
Run Code Online (Sandbox Code Playgroud)
请问我能帮上忙吗?
PS:我使用的是 python 2.7
提前致谢
除其他外,我正在使用 绘制图matplotlib
,我想立即将其存储为 S3 对象。
根据this和this other question以及精美手册中提供的答案,我需要S3.Object.put()
将我的数据移动到AWS中,并且程序应该遵循
from matplotlib import pyplot as plt
import numpy as np
import boto3
import io
# plot something
fig, ax = plt.subplots()
x = np.linspace(0, 3*np.pi, 500)
a = ax.plot(x, np.sin(x**2))
# get image data, cf. /sf/answers/3156988691/
buf = io.BytesIO()
fig.savefig(buf, format="png")
buf.seek(0)
image = buf.read()
# put the image into S3
s3 = boto3.resource('s3', aws_access_key_id=awskey, aws_secret_access_key=awssecret)
s3.Object(mybucket, mykey).put(ACL='public-read', Body=image)
Run Code Online (Sandbox Code Playgroud)
但是,我最终得到了一个内容长度为零的新 S3 对象。
下面给了我一个内容长度为 6 …
我有一个字典列表,例如
temp_dict = [{'id':'1', 'name':'john'},{'id':'2', 'name':'jake'},{'id':'3', 'name':'jacob'}]
是否有一种方法可以直接将此字典作为 csv 文件(管道分隔)写入 S3。我不想从此列表中在本地创建 csv 文件,然后将其复制到 S3。
在 AWS lambda 中,我使用 boto3 将字符串放入 S3 文件中:
import boto3
s3 = boto3.client('s3')
data = s3.get_object(Bucket=XXX, Key=YYY)
data.put('Body', 'hello')
Run Code Online (Sandbox Code Playgroud)
有人告诉我:
[ERROR] AttributeError: 'dict' object has no attribute 'put'
Run Code Online (Sandbox Code Playgroud)
同样发生data.put('hello')
在How to write a file or data to an S3 object using boto3 and with data.put_object
:的顶级答案推荐的方法'dict' object has no attribute 'put_object'
。
我究竟做错了什么?
相反,阅读效果很好(使用data.get('Body').read().decode('utf-8')
)。
我正在创建一个 lambda 函数来分析股票价格并将结果作为 .csv 文件上传到我的 s3 存储桶中。为了做到这一点,我正在使用s3fs
. 但我无法将 s3fs 导入我的 lambda 函数。错误信息是
{
"errorMessage": "cannot import name 'resolve_checksum_context' from 'botocore.client' (/var/runtime/botocore/client.py)",
"errorType": "ImportError",
"requestId": "314d356c-c114-4c97-84a2-deb388f6cf8a",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 11, in lambda_handler\n import s3fs\n",
" File \"/mnt/packages/s3fs/__init__.py\", line 1, in <module>\n from .core import S3FileSystem, S3File\n",
" File \"/mnt/packages/s3fs/core.py\", line 20, in <module>\n import aiobotocore.session\n",
" File \"/mnt/packages/aiobotocore/session.py\", line 7, in <module>\n from .client import AioClientCreator, AioBaseClient\n",
" File \"/mnt/packages/aiobotocore/client.py\", line 2, in <module>\n from botocore.client …
Run Code Online (Sandbox Code Playgroud) amazon-s3 ×4
aws-lambda ×3
python ×3
python-3.x ×3
boto3 ×2
csv ×1
dictionary ×1
io ×1
matplotlib ×1