pathlib 🤝 fsspec
Like pathlib, Python standard library module, manipulate remote filesystem paths.
pip install pathlibfs
It only provide Path class:
from pathlibfs import Path
p = Path('your/path.txt')
p_s3 = Path('s3://bucket/key.txt')
p_gcs = Path('gs://bucket/key.txt')pathlibfs uses fsspec as a backend filesystem.
So if you want to use some specific remote filesystem, you need to install extra dependencies such as s3fs or gcsfs.
See known implementations to check out supported protocols.
| name | description |
|---|---|
| PATHLIBFS_S3_SESSION_CACHE | If defined, store S3 session cache locally like boto3-session-cache |
Path class has many methods, and it's almost same as pathlib and fsspec.AbstractFileSystem
.
For example, like pathlib, you can join path with /:
p = Path('some/dir') / 'subdir' # -> Path('some/dir/subdir')
Gotcha.
| name | description |
|---|---|
| fs | backend filesystem of fsspec |
| path | path without protocol. e.g. Path('s3://bucket/key') == 'bucket/key' |
| fullpath | path with protocol. e.g. Path('a.txt') == 'file://a.txt' |
| urlpath | path with full chain. e.g. Path('simplecache::s3://bucket/key') == 'simplecache::s3://bucket/key' |
| drive | same as pathlib |
| root | same as pathlib |
| parts | same as pathlib |
| anchor | same as pathlib |
| parents | same as pathlib, return List[Path] |
| parent | same as pathlib, return Path |
| has_parent | same as path.parent != path |
| name | same as pathlib |
| suffix | same as pathlib |
| suffixes | same as pathlib |
| stem | same as pathlib |
| sep | separator of backend filesystem, such as '/' |
| protocol | backend protocol. e.g. 's3', 'gcs' |
| name | description |
|---|---|
as_posix() |
only for local filesystem, otherwise raise an PathlibfsException |
chmod(mode: int) |
only for local filesystem, otherwise raise an PathlibfsException |
group() |
only for local filesystem, otherwise raise an PathlibfsException |
is_mount() |
only for local filesystem, otherwise raise an PathlibfsException |
is_symlink() |
only for local filesystem, otherwise raise an PathlibfsException |
is_socket() |
only for local filesystem, otherwise raise an PathlibfsException |
is_fifo() |
only for local filesystem, otherwise raise an PathlibfsException |
is_block_device() |
only for local filesystem, otherwise raise an PathlibfsException |
is_char_device() |
only for local filesystem, otherwise raise an PathlibfsException |
owner() |
only for local filesystem, otherwise raise an PathlibfsException |
symlink_to(target: PathLike) |
only for local filesystem, otherwise raise an PathlibfsException |
resolve() |
only for local filesystem, otherwise return self |
is_absolute() |
only for local filesystem, otherwise return True |
is_reserved() |
only for local filesystem, otherwise return False |
joinpath(*p) |
same as pathlib |
match(pattern: str) |
same as pathlib |
with_name(name: str) |
same as pathlib |
with_suffix(suffix: str) |
same as pathlib |
read_bytes() |
same as pathlib |
read_text() |
same as pathlib |
write_text(data) |
same as pathlib |
write_bytes(data) |
same as pathlib |
is_dir() |
same as pathlib |
is_file() |
same as pathlib |
unlink() |
same as pathlib |
relative_to(path: PathLike) |
same as pathlib, but return str. path == other / path.relative_to(other) |
iterdir(**kwargs) |
same as pathlib. It's just an wrapper of ls(), it's not efficient. Use ls(). |
stat() |
alias of info. It's not same as pathlib, but fsspec's info() |
rglob(pattern, **kwargs) |
same meaning as pathlib, and accept fsspec's glob() |
| name | description |
|---|---|
ls(**kwargs) |
same as fsspec |
listdir() |
alias of ls |
find(maxdepth: Optional[int] = None, withdirs: bool = False, **kwargs) |
same as fsspec |
glob(pattern, **kwargs) |
same as fsspec |
expand_path(recursive: bool = False, maxdepth: Optional[int] = None, **kwargs) |
same as fsspec |
walk(maxdepth: Optional[int] = None, **kwargs) |
same as os.walk and fsspec's walk, yield (dirpath, dirnames, filenames). And dirpath is Path instance. |
exists(**kwargs) |
same as fsspec |
isdir() |
same as fsspec |
isfile() |
same as fsspec |
lexists() |
same as fsspec |
ukey() |
same as fsspec |
checksum() |
same as fsspec |
sign(expiration: int = 100, **kwargs) |
same as fsspec |
size() |
same as fsspec |
created() |
same as fsspec |
modified() |
same as fsspec |
du(total: bool = True, maxdepth: Optional[int] = None, **kwargs) |
same as fsspec |
disk_usage() |
alias of du |
info(**kwargs) |
same as fsspec |
open() |
same as fsspec |
cat(recursive: bool = False, on_error: str = "raise", **kwargs) |
same as fsspec |
read_block(offset: int, length: int, delimiter: Optional[bytes] = None) |
same as fsspec |
head(size: int = 1024) |
same as fsspec |
tail(size: int = 1024) |
same as fsspec |
mkdir(parents: bool = False, exist_ok: bool = False, **kwargs) |
same as fsspec |
makedir() |
alias of mkdir |
makedirs(exist_ok: bool = False, **kwargs) |
same as mkdir(parents=True) |
mkdirs() |
alias of makedirs |
| `touch(mode: int = 0o666, exist_ok: bool = True, truncate: bool = False, **kwargs) | same as fsspec |
pipe_file(data) |
same as fsspec |
rm_file() |
same as fsspec |
rm(recursive: bool = False, maxdepth: Optional[int] = None) |
same as fsspec |
delete() |
alias of rm |
invalidate_cache() |
same as fsspec |
clear_instance_cache() |
same as fsspec |
copy(dst: PathLike, recursive: bool = False, on_error: Optional[str] = None, **kwargs) |
copy the path to dst. copy() can handle any protocol combinations so you don't need to call put() or get() for almost all cases. |
cp() |
alias of copy |
move(dst: PathLike, recursive=False, maxdepth=None, **kwargs) |
similar to copy, but delete source path after copy. |
mv(), rename(), `replace() |
alias of move |
put(target: PathLike, recursive: bool = False, callback=fsspec.callbacks._DEFAULT_CALLBACK, **kwargs) |
Upload local target to the path. |
upload() |
alias of put |
get(arget: PathLike, recursive: bool = False, callback=fsspec.callbacks._DEFAULT_CALLBACK, **kwargs) |
Downalod the path into local target. |
download() |
alias of get |
| name | description |
|---|---|
islocal() |
True if protocol is local filesystem. |
clone(path: Optional[str] = None) |
copy self instance with different path (optional). |
samefile(target: PathLike) |
same as self == target |
Start mock server for testing.
docker-compose up -d
Run test:
pytest