pathlib and glob basic


In [86]:
# 多行结果输出支持
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

In [87]:
from pathlib import Path, PurePath, PureWindowsPath

In [88]:
# 查看目录下的内容
p = Path('..')
[x for x in p.iterdir() if x.is_dir()]


Out[88]:
[PosixPath('../tensorflow'),
 PosixPath('../kaggle'),
 PosixPath('../python'),
 PosixPath('../tensorlayer'),
 PosixPath('../.kaggle-cli'),
 PosixPath('../mxnet'),
 PosixPath('../datasets'),
 PosixPath('../pytorch'),
 PosixPath('../keras'),
 PosixPath('../.ipynb_checkpoints')]

In [89]:
# 所有的notebook文件
list(p.glob('**/*.ipynb'))


Out[89]:
[PosixPath('../salary.ipynb'),
 PosixPath('../envtest.ipynb'),
 PosixPath('../kaggle/Titanic.ipynb'),
 PosixPath('../kaggle/.ipynb_checkpoints/Titanic-checkpoint.ipynb'),
 PosixPath('../python/pathlib_glob.ipynb'),
 PosixPath('../python/.ipynb_checkpoints/pathlib_glob-checkpoint.ipynb'),
 PosixPath('../mxnet/basic.ipynb'),
 PosixPath('../mxnet/.ipynb_checkpoints/basic-checkpoint.ipynb'),
 PosixPath('../.ipynb_checkpoints/envtest-checkpoint.ipynb'),
 PosixPath('../.ipynb_checkpoints/salary-checkpoint.ipynb'),
 PosixPath('../.ipynb_checkpoints/Titanic-checkpoint.ipynb')]

In [90]:
# 切换目录
dir1 = p / 'python'
dir1


Out[90]:
PosixPath('../python')

In [91]:
# 获取绝对路径,在Windows下会把 '/' 替换为 '\'
dir1.resolve()


Out[91]:
PosixPath('/home/autuanliu/pyNotes/python')

In [92]:
# 当前路径是否存在
dir1.exists()


Out[92]:
True

In [93]:
# 判断是否是目录
dir1.is_dir()


Out[93]:
True

In [94]:
file1 = dir1 / 'pathlib_glob.ipynb'

In [95]:
file1.is_dir()


Out[95]:
False

In [136]:
# 打开文件
with file1.open() as f:
    f.readline()


Out[136]:
'{\n'

In [97]:
# Pure Path 类对象会使得访问与操作系统无关

In [98]:
dir2 = PurePath('../python')
# or
dir2 = PurePath('..', 'python')
# or
dir2 = PurePath(Path('..'), Path('python'))
# PurePath() 会默认获得当前的路径

In [99]:
dir2


Out[99]:
PurePosixPath('../python')

In [100]:
# 当一次给出多个绝对路径时,一般将最后的路径作为最终的结果
# 但是,在Windows路径中,更改本地根目录不会丢弃之前的驱动器设置
PurePath('/etc', '/usr', 'lib64')
PureWindowsPath('c:/Windows', '/Program Files')


Out[100]:
PurePosixPath('/usr/lib64')
Out[100]:
PureWindowsPath('c:/Program Files')

In [101]:
PurePath('foo//bar')
PurePath('foo/./bar')
PurePath('foo/../bar')


Out[101]:
PurePosixPath('foo/bar')
Out[101]:
PurePosixPath('foo/bar')
Out[101]:
PurePosixPath('foo/../bar')
  • 路径之间也是可以进行比较的
    • >
    • <
    • ==
    • in

In [102]:
dir3 = dir2 / 'pathlib_glob.ipynb'

In [103]:
dir3


Out[103]:
PurePosixPath('../python/pathlib_glob.ipynb')

In [104]:
# 获取路径的各个部分
# 其会返回一个元组
dir3.parts


Out[104]:
('..', 'python', 'pathlib_glob.ipynb')

In [105]:
# 获取驱动器标识
dir3.drive


Out[105]:
''

In [106]:
dir3.root


Out[106]:
''

In [107]:
dir2.anchor


Out[107]:
''

In [108]:
# 获取父目录
dir3.parents[0]
dir3.parents[1]
dir3.parent


Out[108]:
PurePosixPath('../python')
Out[108]:
PurePosixPath('..')
Out[108]:
PurePosixPath('../python')

In [109]:
# 获取最后的名字
dir3.name


Out[109]:
'pathlib_glob.ipynb'

In [110]:
# 最后文件或者路径的后缀获取
dir3.suffix
dir3.suffixes


Out[110]:
'.ipynb'
Out[110]:
['.ipynb']

In [111]:
# 最后文件的名字,不带有后缀
dir3.stem


Out[111]:
'pathlib_glob'

In [112]:
# 匹配
PurePath('a/b.py').match('*.py')
PurePath('/a/b/c.py').match('b/*.py')


Out[112]:
True
Out[112]:
True

In [113]:
# Return a new path with the name changed. If the original path doesn’t have a name,
# ValueError is raised:
p1 = PurePath('../python')
p1.with_name('pathlib_glob.ipynb')


Out[113]:
PurePosixPath('../pathlib_glob.ipynb')

In [119]:
# with_suffix 改后缀

In [124]:
# 获取当前的路径
Path.cwd()


Out[124]:
PosixPath('/home/autuanliu/pyNotes/python')

In [132]:
# 获取文件的信息
file1.stat()


Out[132]:
os.stat_result(st_mode=33204, st_ino=7371900, st_dev=2056, st_nlink=1, st_uid=1000, st_gid=1000, st_size=14153, st_atime=1517229152, st_mtime=1517229152, st_ctime=1517229152)

.glob 可以用于匹配文件

  • Path.mkdir() 可以用于创建文件夹

In [138]:
# 获取文件或者文件夹的所有者
file1.owner()


Out[138]:
'autuanliu'

glob Module使用和 Unix shell 相同的正则表达式进行匹配


In [ ]: