用于云存储服务的 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 正在路上。
- 可扩展:基类通常完成大部分工作,因此实现两个小类
MyPath是MyClient您添加对新云存储服务的支持所需的全部。 - 读/写支持:阅读有效。使用
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.com的srip制作的图标。
使用reprexpy 包
生成的示例代码块。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
cloudpathlib -0.10.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | f18577832c95e47511bfc937caa2a014c1531f04e26359039095ed09f1e5ad4e |
|
| MD5 | 79c6bba8eac402ab69513dce73fcfcfd |
|
| 布莱克2-256 | dc70bf773d386f645818a53e9b222d2270695dbdc2446576bd5df5bf3fff3da7 |
cloudpathlib -0.10.0-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e1c735f08da68c02d4889e54a389a2330ffa9388cc5e1ff6fc56b5e4730778bf |
|
| MD5 | 082f33e3fa03cc7777bb3f42dc66b759 |
|
| 布莱克2-256 | d34bdf34f2bf4d66068c74912749a9e2f0092ee560006d35d8ec6bd03c558d9c |