Package: pathlib-revised
pathlib_revisedExpand the origin Pythonpathlibmodule:work-a-round for Windows MAX_PATH limit, by adding\\?\path prefixadd missing stuff, like:makedirs,utime,scandiretc.There is also the class, calledDirEntryPaththat holds more cached information thanos.DirEntrypython 3.4 or newer onlyBeta statePlease, try, fork and contribute! ;)travis-ci.org/jedie/pathlib_revisedci.appveyor.com/project/jedie/pathlib_revisedcoveralls.io/r/jedie/pathlib_revisedrequires.io/github/jedie/pathlib_revised/requirements/Windows MAX_PATHThere is a limit in the Windows API: Path can’t be longer than 259 characters (called: “MAX_PATH”).
The work-a-round is to add the prefix\\?\to every absolute path, see:https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpathThePath2()class has the additional propertyextended_path:>>> from pathlib_revised import Path2
>>> p=Path2("c:\foo\bar")
>>> p.extended_path
'\\?\c:\foo\bar'All existing methods ofPath2()will internally useextended_path, so that theMAX_PATHlimit is not longer a problem.extended_pathexist also under Posix-Systems, but it’s the same aspath:>>> p=Path2("/foo/bar")
>>> p.path
'/foo/bar'
>>> p.extended_path
'/foo/bar'Additional methodsos.**`listdir() <https://docs.python.org/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.python.org/3/library/shutil.html#shutil.copyfile>`_**<pre>
>>> Path2(“a_file.txt”).copyfile(Path2(“a_file_copy.txt”))
</pre> * os.path.**`expanduser() <https://docs.python.org/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.python.org/3/library/os.html#os.link>`_**<pre>
>>> Path2(“source.txt”).link(Path2(“hardlinked.txt”))
</pre> * os.**`makedirs() <https://docs.python.org/3/library/os.html#os.makedirs>`_**<pre>
>>> Path2(“a”, “new”, “path”).makedirs()
</pre> * os.**`utime() <https://docs.python.org/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.python.org/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> It’s a generator that yields os.**`DirEntry <https://docs.python.org/3/library/os.html#os.DirEntry>`_** instances.scandiris new in Python 3.5, but in Path2() is will fall-back to the externalscandirmodule.You miss a method? Please, fork, implement, add tests and send a pull request! ;)miscPath2() hat the.pathproperty, that is normally new in Python 3.4.5 and 3.5.2
So you can use it with older Python Version, too.DirEntryPathTheDirEntryPathholds more cached information:instance**.dir_entry**os.DirEntry() instanceinstance**.path**str or bytes of the path, from:os.DirEntry()**.path**instance**.is_symlinkbool fromos.DirEntry()**.is_symlink()**instance**.is_filebool fromos.DirEntry()**.is_file(follow_symlinks=False)**instance**.is_dirbool fromos.DirEntry()**.is_dir(follow_symlinks=False)**instance**.statbool fromos.DirEntry()**.stat(follow_symlinks=False)**instance**.path_instancePath2()instanceinstance**.resolved_pathPath2()instance from.resolve()(If resolve errored:None)instance**.resolve_errorThe error Instance, if .resolve() failed.Create a instance by feeding aos.DirEntryinstance, e.g.:>>> 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......: 4802History08.02.2016 - v0.1.0code cleanup + more testsmove files formPyHardLinkBackupLinkshttps://pypi.python.org/pypi/pathlib_revised/