标签: python-s3fs

S3FS python,凭证内联

我正在尝试使用 python s3fs 读取 S3 AWS 中的文件。

我找不到将凭证(访问密钥 + 秘密)放入 s3fs 代码的代码。

任何人都可以帮助我如何设置此信息以及 s3fs 代码。

import s3fs
fs = s3fs.S3FileSystem(anon=True)
Run Code Online (Sandbox Code Playgroud)

我目前使用的是 Windows 10。

python amazon-web-services python-s3fs

9
推荐指数
1
解决办法
7472
查看次数

Pandas read_csv 指定 AWS 配置文件

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 个对象。保持问题的开放性,看看是否有另一种更干净/简单的方法。

python pandas python-s3fs

8
推荐指数
2
解决办法
5672
查看次数

pandas 数据帧上的 s3fs gzip 压缩

我正在尝试使用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)

写入问题的建议/替代方案?先感谢您!。

python amazon-s3 dask python-s3fs

7
推荐指数
1
解决办法
1722
查看次数

导入错误:缺少可选依赖项“S3Fs”。需要 S3Fs 包来处理 S3 文件。使用 pip 或 conda 安装 S3Fs

我使用 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,但仍然存在相同的错误。

请帮我。

pip amazon-s3 python-3.x aws-cloud9 python-s3fs

7
推荐指数
2
解决办法
1万
查看次数

s3fs 突然停止在 Google Colab 中工作,出现错误“AttributeError: module 'aiobotocore' has no attribute 'AioSession'”

昨天,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,似乎是最新的。

在此处输入图片说明

python botocore google-colaboratory python-s3fs

7
推荐指数
1
解决办法
573
查看次数

使用诗歌解决 boto3 和 s3fs 上的依赖关系失败

我可以使用以下命令安装 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)

boto3 python-poetry python-s3fs

7
推荐指数
1
解决办法
3210
查看次数

使用 s3fs 下载文件

我正在尝试使用 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)

python amazon-s3 python-s3fs

5
推荐指数
1
解决办法
2541
查看次数

aiobotocore - 导入错误:无法导入名称“InvalidIMDSEndpointError”

下面的代码引发导入异常

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)

python-3.x boto3 ubuntu-18.04 python-s3fs

4
推荐指数
2
解决办法
3414
查看次数

如何将 S3 存储桶挂载为本地文件系统?

我有一个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 amazon-s3 amazon-web-services python-s3fs

2
推荐指数
1
解决办法
7440
查看次数