pathlib_revised是pathlib的增强版本
项目描述
pathlib_revised
扩展原始Python pathlib 模块
针对Windows MAX_PATH限制的工作-绕过,通过添加 \\?\ 路径前缀
添加缺失的功能,例如:makedirs、utime、scandir等。
还有一个名为DirEntryPath的类,它比os.DirEntry拥有更多缓存信息
仅限python 3.4或更高版本
测试版状态
请尝试,分叉并贡献! ;)
Windows MAX_PATH
Windows API中存在限制:路径长度不能超过259个字符(称为:“MAX_PATH”)。解决方案是在每个绝对路径前添加前缀 \\?\,请参阅
Path2() 类具有额外的属性 extended_path
>>> from pathlib_revised import Path2 >>> p=Path2("c:\foo\bar") >>> p.extended_path '\\?\c:\foo\bar'
Path2() 的所有现有方法将内部使用 extended_path,因此 MAX_PATH 限制不再是问题。
extended_path 在 Posix 系统中也存在,但它与 path 相同。
>>> p=Path2("/foo/bar") >>> p.path '/foo/bar' >>> p.extended_path '/foo/bar'
附加方法
os.**`listdir() <https://docs.pythonlang.cn/3/library/os.html#os.listdir>`_**
<pre> >>> Path2(“/”).listdir() [‘sbin’, ‘boot’, ‘tmp’, ‘sys’, ‘var’, ‘dev’, ‘usr’, ‘root’, ‘home’, …, ‘initrd.img’, ‘vmlinuz’] </pre> * shutil.**`copyfile() <https://docs.pythonlang.cn/3/library/shutil.copyfile>`_**
<pre> >>> Path2(“a_file.txt”).copyfile(Path2(“a_file_copy.txt”)) </pre> * os.path.**`expanduser() <https://docs.pythonlang.cn/3/library/os.path.html#os.path.expanduser>`_**
<pre> >>> p=Path2(“~”, “sub”, “dir”) >>> p PosixPath2(‘~/sub/dir’) >>> p.expanduser() PosixPath2(‘/home/username/sub/dir’) </pre> * os.**`link() <https://docs.pythonlang.cn/3/library/os.html#os.link>`_**
<pre> >>> Path2(“source.txt”).link(Path2(“hardlinked.txt”)) </pre> * os.**`makedirs() <https://docs.pythonlang.cn/3/library/os.html#os.makedirs>`_**
<pre> >>> Path2(“a”, “new”, “path”).makedirs() </pre> * os.**`utime() <https://docs.pythonlang.cn/3/library/os.html#os.utime>`_**
<pre> >>> mtime = 111111111 # UTC: 1973-07-10 00:11:51 >>> atime = 222222222 # UTC: 1977-01-16 01:23:42
>>> p.Path2("dir/or/file") >>> p.utime(times=(atime, mtime)) >>> stat = p.stat() >>> stat.st_atime 222222222 >>> stat.st_mtime 111111111 </pre> * os.**`scandir() <https://docs.pythonlang.cn/3/library/os.html#os.scandir()>`_**
<pre> >>> p=Path2(“/foo/bar”) >>> for dir_item in p.scandir(): … print(dir_item) … <PosixDirEntry: ‘filename’> <PosixDirEntry: ‘directory’> <PosixDirEntry: ‘…’> </pre> 这是一个生成器,它会产生 os.**`DirEntry <https://docs.pythonlang.cn/3/library/os.html#os.DirEntry>`_** 实例。 scandir 是 Python 3.5 中的新功能,但在 Path2() 中将回退到外部的 scandir 模块。
您遗漏了一个方法吗?请,分支、实现、添加测试并提交拉取请求! ;)
杂项
Path2() 有一个 .path 属性,这在 Python 3.4.5 和 3.5.2 中通常是新的。因此,您也可以在较老的 Python 版本中使用它。
DirEntryPath
DirEntryPath 存储了更多的缓存信息
实例**.dir_entry** |
os.DirEntry() 实例 |
实例**.path |
路径的 str 或 bytes,来自: os.DirEntry()**.path** |
实例**.is_symlink |
从 os.DirEntry()**.is_symlink()** 得到的 bool 值 |
实例**.is_file |
从 os.DirEntry()**.is_file(follow_symlinks=False)** 得到的 bool 值 |
实例**.is_dir |
从 os.DirEntry()**.is_dir(follow_symlinks=False)** 得到的 bool 值 |
实例**.stat |
从 os.DirEntry()**.stat(follow_symlinks=False)** 得到的 bool 值 |
实例**.path_instance |
Path2() 实例 |
实例**.resolved_path |
Path2() 实例来自 .resolve() (如果 resolve 出错:None) |
实例**.resolve_error |
如果 .resolve() 失败,则为错误实例。 |
通过提供一个 os.DirEntry 实例来创建一个实例,例如。
>>> from pathlib_revised import Path2, DirEntryPath >>> src_path = Path2("foo/") >>> for dir_entry in src_path.scandir(): ... dir_entry_path = DirEntryPath(dir_entry) ... print(dir_entry_path.pformat()) *** <DirEntryPath foo/file1> : path.......: 'foo/file1' path instance..: PosixPath2('foo/file1') resolved path..: PosixPath2('/home/bar/foo/file1') resolve error..: None different path.: True is symlink.....: False is file........: False is dir.........: True stat.size......: 38 *** <DirEntryPath foo/BrokenSymlink.ext> : path.......: 'foo/BrokenSymlink.ext' path instance..: PosixPath2('foo/BrokenSymlink.ext') resolved path..: None resolve error..: FileNotFoundError(2, 'No such file or directory') different path.: True is symlink.....: True is file........: False is dir.........: False stat.size......: 15 *** <DirEntryPath foo/README.creole> : path.......: 'foo/README.creole' path instance..: PosixPath2('foo/README.creole') resolved path..: PosixPath2('/home/bar/foo/README.creole') resolve error..: None different path.: True is symlink.....: False is file........: True is dir.........: False stat.size......: 4802
历史记录
08.02.2016 - v0.1.0
代码清理 + 更多测试
将文件从 PyHardLinkBackup 移动
链接
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建的发行版
pathlib_revised-0.1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4c3528dbdd66cd1582242319648c921ff9552bec789c970ff1b628a66df8824c |
|
MD5 | 43829dc4ee27171c4fc0ba89b8c00134 |
|
BLAKE2b-256 | 789e1fa9eb70f60e5808af185004ac98d417a5e52b979ff354f228fb4544a52f |
pathlib_revised-0.1.0-py3.4.egg的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d38bedcd2077950043615929b021aae905b6163de66f678656bee2c8b8ea1215 |
|
MD5 | 5dc00a6d2b48927c97874d217facf410 |
|
BLAKE2b-256 | 20a231d98d5770f2f476722bc08ff2b37eb2429bc1a385e5dba7a9caacccb9d0 |
pathlib_revised-0.1.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fd59a14410b682c1d6ed0210ada131469b0a51363d4261008cbf595a67118cd9 |
|
MD5 | e6a77b92fc97187a4c0258e32d70975f |
|
BLAKE2b-256 | 6d85900c47c9ea8c0a9a972fcdbda859877cfa047157efdf566dc0300e84ac2b |