我正在尝试使用 python s3fs 读取 S3 AWS 中的文件。
我找不到将凭证(访问密钥 + 秘密)放入 s3fs 代码的代码。
任何人都可以帮助我如何设置此信息以及 s3fs 代码。
import s3fs
fs = s3fs.S3FileSystem(anon=True)
Run Code Online (Sandbox Code Playgroud)
我目前使用的是 Windows 10。
Pandas (v1.0.5) 使用s3fs库连接 AWS S3 并读取数据。~/.aws/credentials默认情况下,s3fs 使用配置文件中的文件中找到的凭据default。如何指定 pandas 在从 S3 读取 CSV 时应使用哪个配置文件?
例如。
s3_path = 's3://mybucket/myfile.csv'
df = pd.read_csv(s3_path)
Run Code Online (Sandbox Code Playgroud)
$ cat ~/.aws/credentials
[default]
aws_access_key_id = ABCD
aws_secret_access_key = XXXX
[profile2]
aws_access_key_id = PQRS
aws_secret_access_key = YYYY
[profile3]
aws_access_key_id = XYZW
aws_secret_access_key = ZZZZ
Run Code Online (Sandbox Code Playgroud)
编辑 :
当前的黑客/工作解决方案:
import botocore
import s3fs
session = botocore.session.Session(profile='profile2')
s3 = s3fs.core.S3FileSystem(anon=False, session=session)
df = pd.read_csv( s3.open(path_to_s3_csv) )
Run Code Online (Sandbox Code Playgroud)
上述解决方案的唯一问题是您需要导入 2 个不同的库并实例化 2 个对象。保持问题的开放性,看看是否有另一种更干净/简单的方法。
我正在尝试使用s3fs库和 pandas在 S3 上将数据帧编写为 CSV 文件。尽管有文档,但恐怕 gzip 压缩参数不适用于 s3fs。
def DfTos3Csv (df,file):
with fs.open(file,'wb') as f:
df.to_csv(f, compression='gzip', index=False)
Run Code Online (Sandbox Code Playgroud)
此代码将数据帧保存为 S3 中的新对象,但保存为纯 CSV 而非 gzip 格式。另一方面,使用此压缩参数可以正常工作的读取功能。
def s3CsvToDf(file):
with fs.open(file) as f:
df = pd.read_csv(f, compression='gzip')
return df
Run Code Online (Sandbox Code Playgroud)
写入问题的建议/替代方案?先感谢您!。
我使用 AWS Cloud9 作为我的 IDE。
import boto3
import pandas as pd
# import s3fs
# s3_ob=boto3.resource('s3',aws_access_key_id="xxxxxxxxxx",aws_secret_access_key="xxxxxxxxxxxx")
client=boto3.client('s3')
path="s3://xxxxxx/FL_insurance_sample.csv"
df=pd.read_csv(path)
# df.head()
print(df)`
Run Code Online (Sandbox Code Playgroud)
虽然我能够在 Pycharm 中获取输出 CSV 文件,但当我在 AWS 上的 Cloud9 IDE 中使用相同的代码时,我收到了标题中提到的错误。
我已经使用 pip install S3Fs 安装了 S3Fs,当我执行“pip list”时,它确实给了我包含 S3Fs 的已安装列表,所以我很困惑,为什么我在模块已经安装并显示在pip 列表,我还尝试取消注释导入 S3Fs,但仍然存在相同的错误。
请帮我。
昨天,Google Colab 中的以下单元格序列将起作用。
(我正在使用colab-env从 Google Drive 导入环境变量。)
今天早上,当我运行相同的代码时,出现以下错误。
这似乎是 s3fs 和 aiobotocore 的新问题。我对 Google Colab 和库版本依赖性问题有一些经验,我以前通过按特定顺序升级库来解决这些问题:
!pip install --upgrade library_name
Run Code Online (Sandbox Code Playgroud)
但是今天早上我有点被这个问题困扰。它影响了我所有的 Google Colab 笔记本,所以我认为它可能会影响使用存储在 Amazon AWS S3 中的数据和 Google Colab 的其他人。
安装的 s3fs 版本是 2021.07.0,似乎是最新的。
我可以使用以下命令安装 boto3、s3fs 和 pandas:
pip install boto3 pandas s3fs
Run Code Online (Sandbox Code Playgroud)
但诗歌却失败了:
poetry add boto3 pandas s3fs
Run Code Online (Sandbox Code Playgroud)
这是错误:
Because no versions of s3fs match >2023.3.0,<2024.0.0
and s3fs (2023.3.0) depends on aiobotocore (>=2.4.2,<2.5.0), s3fs (>=2023.3.0,<2024.0.0) requires aiobotocore (>=2.4.2,<2.5.0).
And because no versions of aiobotocore match >2.4.2,<2.5.0
and aiobotocore (2.4.2) depends on botocore (>=1.27.59,<1.27.60), s3fs (>=2023.3.0,<2024.0.0) requires botocore (>=1.27.59,<1.27.60).
And because boto3 (1.26.91) depends on botocore (>=1.29.91,<1.30.0)
and no versions of boto3 match >1.26.91,<2.0.0, s3fs (>=2023.3.0,<2024.0.0) is incompatible with boto3 (>=1.26.91,<2.0.0).
So, because engexploit-k8s-pod-operator-images …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 s3fs 库从 s3 存储桶下载 csv 文件。我注意到使用 Pandas 编写新的 csv 以某种方式改变了数据。所以我想直接下载原始状态的文件。
该文档具有下载功能,但我不明白如何使用它:
download(self, rpath, lpath[, recursive]): Alias of FilesystemSpec.get.
这是我尝试过的:
import pandas as pd
import datetime
import os
import s3fs
import numpy as np
#Creds for s3
fs = s3fs.S3FileSystem(key=mykey, secret=mysecretkey)
bucket = "s3://mys3bucket/mys3bucket"
files = fs.ls(bucket)[-3:]
#download files:
for file in files:
with fs.open(file) as f:
fs.download(f,"test.csv")
AttributeError: 'S3File' object has no attribute 'rstrip'
Run Code Online (Sandbox Code Playgroud) 下面的代码引发导入异常
import s3fs
fs = s3fs.S3FileSystem(anon=False)
Run Code Online (Sandbox Code Playgroud)
例外
Traceback (most recent call last):
File "issue.py", line 1, in <module>
import s3fs
File "/home/ubuntu/.local/lib/python3.6/site-packages/s3fs/__init__.py", line 1, in <module>
from .core import S3FileSystem, S3File
File "/home/ubuntu/.local/lib/python3.6/site-packages/s3fs/core.py", line 14, in <module>
import aiobotocore
File "/home/ubuntu/.local/lib/python3.6/site-packages/aiobotocore/__init__.py", line 1, in <module>
from .session import get_session, AioSession
File "/home/ubuntu/.local/lib/python3.6/site-packages/aiobotocore/session.py", line 6, in <module>
from .client import AioClientCreator, AioBaseClient
File "/home/ubuntu/.local/lib/python3.6/site-packages/aiobotocore/client.py", line 12, in <module>
from .utils import AioS3RegionRedirector
File "/home/ubuntu/.local/lib/python3.6/site-packages/aiobotocore/utils.py", line 10, in <module>
from botocore.exceptions import …Run Code Online (Sandbox Code Playgroud) 我有一个Jupiter-notebook在 AWS 上运行的 python 应用程序。我将 a 加载C-library到我的 python 代码中,它需要一个文件的路径。我想从 S3 存储桶访问此文件。
我尝试使用 s3fs:
s3 = s3fs.S3FileSystem(anon=False)
Run Code Online (Sandbox Code Playgroud)
usings3.ls('..')列出了我所有的存储桶文件...到目前为止还可以。但是,我使用的库实际上应该在我无法访问的地方使用 s3 变量。我只能将路径传递给c库。
有没有办法以某种方式挂载 s3 存储桶,在那里我不必调用
s3.open(),并且可以调用open(/path/to/s3)隐藏的某个地方,s3 存储桶实际上是作为本地文件系统挂载的?
我认为它应该在不使用 s3 的情况下工作。因为我无法更改我在内部使用的库来使用 s3 变量...
with s3.open("path/to/s3/file",'w') as f:
df.to_csv(f)
with open("path/to/s3/file",'w') as f:
df.to_csv(f)
Run Code Online (Sandbox Code Playgroud)
还是我完全错了?
iam 使用的 c 库在 python 中作为 DLL 加载,我调用了一个函数:
lib.OpenFile(path/to/s3/file)
Run Code Online (Sandbox Code Playgroud)
我必须将路径传递s3到库 OpenFile 函数中。
python-s3fs ×9
python ×6
amazon-s3 ×4
boto3 ×2
python-3.x ×2
aws-cloud9 ×1
botocore ×1
dask ×1
pandas ×1
pip ×1
ubuntu-18.04 ×1