Skip to main content

用于云存储服务的 pathlib 样式类

项目描述

文档状态 派皮 康达锻造 测试 编解码器

我们的目标是成为文件管理库的蛋白酥皮:pathlib与云的空灵轻盈和谐共处的微妙甜蜜。

一个 Python 库,其类模仿pathlib.Path来自不同云存储服务的 URI 的接口。

with CloudPath("s3://bucket/filename.txt").open("w+") as f:
    f.write("Send my changes to the cloud!")

为什么要使用 cloudpathlib?

  • 熟悉:如果你知道如何与之互动Path,你就知道如何与之互动CloudPath。所有与云相关的Path方法都已实现。
  • 支持的云:实现了 AWS S3、Google Cloud Storage 和 Azure Blob Storage。FTP 正在路上。
  • 可扩展:基类通常完成大部分工作,因此实现两个小类MyPathMyClient您添加对新云存储服务的支持所需的全部。
  • 读/写支持:阅读有效。使用write_text,write_bytes.open('w')方法会将您的更改全部上传到云存储,而无需作为开发人员进行任何额外的文件管理。
  • 无缝缓存:仅在必要时在本地下载文件。您还可以轻松传递持久缓存文件夹,以便跨进程和会话您只重新下载必要的内容。
  • 已测试:全面的测试套件和代码覆盖率。
  • 可测试性:本地文件系统实现,可用于在单元测试中轻松模拟云存储。

安装

cloudpathlib依赖于云服务的 SDK(例如 、、boto3)与它们各自的存储服务进行通信。如果您尝试将云路径用于未安装依赖项的云服务,则会出错并让您知道需要安装什么。google-cloud-storageazure-storage-blobcloudpathlib

要在安装时安装云服务的 SDK 依赖项cloudpathlib,您需要使用 pip 的“附加”规范指定它。例如:

pip install cloudpathlib[s3,gs,azure]

目前支持的云存储服务有:azure, gs, s3. 您还可以使用它all来安装所有可用服务的依赖项。

如果您不指定任何附加功能或单独安装任何云 SDK,您将只能使用用于滚动您自己的云路径类的基类进行开发。

康达

cloudpathlib也可以conda从 conda-forge 使用。请注意,要安装必要的云服务 SDK 依赖项,您应该在包名称中包含适当的后缀。例如:

conda install cloudpathlib-s3 -c conda-forge

如果不使用后缀,则只有基类可用。有关所有安装选项,请参阅conda-forge/cloudpathlib-feedstock

开发版

您可以从 GitHub 获取最新的开发版本:

pip install https://github.com/drivendataorg/cloudpathlib.git#egg=cloudpathlib[all]

请注意,您同样需要指定云服务依赖项,例如all在上面的示例命令中。

快速使用

这是一个获取使用该包的要点的示例。默认情况下,cloudpathlib使用各个云服务 SDK 支持的环境变量进行身份验证。有关更多详细信息和高级身份验证选项,请参阅“身份验证”文档。

from cloudpathlib import CloudPath

# dispatches to S3Path based on prefix
root_dir = CloudPath("s3://drivendata-public-assets/")
root_dir
#> S3Path('s3://drivendata-public-assets/')

# there's only one file, but globbing works in nested folder
for f in root_dir.glob('**/*.txt'):
    text_data = f.read_text()
    print(f)
    print(text_data)
#> s3://drivendata-public-assets/odsc-west-2019/DATA_DICTIONARY.txt
#> Eviction Lab Data Dictionary
#>
#> Additional information in our FAQ evictionlab.org/help-faq/
#> Full methodology evictionlab.org/methods/
#>
#> ... (additional text output truncated)

# use / to join paths (and, in this case, create a new file)
new_file_copy = root_dir / "nested_dir/copy_file.txt"
new_file_copy
#> S3Path('s3://drivendata-public-assets/nested_dir/copy_file.txt')

# show things work and the file does not exist yet
new_file_copy.exists()
#> False

# writing text data to the new file in the cloud
new_file_copy.write_text(text_data)
#> 6933

# file now listed
list(root_dir.glob('**/*.txt'))
#> [S3Path('s3://drivendata-public-assets/nested_dir/copy_file.txt'),
#>  S3Path('s3://drivendata-public-assets/odsc-west-2019/DATA_DICTIONARY.txt')]

# but, we can remove it
new_file_copy.unlink()

# no longer there
list(root_dir.glob('**/*.txt'))
#> [S3Path('s3://drivendata-public-assets/odsc-west-2019/DATA_DICTIONARY.txt')]

支持的方法和属性

pathlib.Path除了在云环境中没有意义的方法和属性外,大多数方法和属性都受支持。还有一些与特定云服务或专门针对云路径相关的其他方法或属性。

方法+属性 AzureBlobPath S3Path GSPath
absolute
anchor
as_uri
drive
exists
glob
is_absolute
is_dir
is_file
is_relative_to
iterdir
joinpath
match
mkdir
name
open
parent
parents
parts
read_bytes
read_text
relative_to
rename
replace
resolve
rglob
rmdir
samefile
stat
stem
suffix
suffixes
touch
unlink
with_name
with_suffix
write_bytes
write_text
as_posix
chmod
cwd
expanduser
group
home
is_block_device
is_char_device
is_fifo
is_mount
is_reserved
is_socket
is_symlink
lchmod
link_to
lstat
owner
readlink
root
symlink_to
with_stem
cloud_prefix
copy
copytree
download_to
etag
fspath
is_valid_cloudpath
rmtree
upload_from
blob
bucket
container
key
md5

www.flaticon.comsrip制作的图标。 使用reprexpy 包
生成的示例代码块。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cloudpathlib-0.10.0.tar.gz (34.8 kB 查看哈希

已上传 source

内置分布

cloudpathlib-0.10.0-py3-none-any.whl (38.9 kB 查看哈希

已上传 py3