python 之 Pathlib 模块 (一)

在最近的苏州项目中,涉及了较多的文件处理。而在大多数人处理文件时,还是用的 OS 模块。

>>> path.rsplit('\\', maxsplit=1)[0]

或者写出下面这样长长的代码

>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))

这里使用 pathlib 模块,可以使代码使用优雅,可读和 Pythonic 代码重写上面的两个示例,如:

>>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()

Python 文件路径处理问题

一般情况,Python 使用常规文本字符串表示文件路径。 一般在使用 os,glob 和 shutil 等库的时候会使用到路径拼接的操作,使用 os 模块拼接起来显得略显复杂,以下示例仅需要三个 import 语句来将所有文本文件移动到归档目录:

import glob
import os
import shutil

for file_name in glob.glob('*.txt'):
    new_path = os.path.join('archive', file_name)
    shutil.move(file_name, new_path)

使用常规的字符串去拼接路径是可以的,但是由于不同的操作系统使用的分隔符不同,这样就容易出现问题,所以一般我们使用最多的还是使用 os.path.join()。

创建路径

from pathlib import Path

你真正需要知道的是 pathlib.Path 类。 创建路径有几种不同的方式。 首先,有类方法,如.cwd(当前工作目录)和.home(用户的主目录):

from pathlib import Path

now_path = Path.cwd()
home_path = Path.home()

print("当前工作目录",now_path,type(now_path))
print("home目录",home_path,type(home_path))

输出内容:

当前工作目录 /Users/chennan/pythonproject/demo <class 'pathlib.PosixPath'>
home目录 /Users/chennan <class 'pathlib.PosixPath'>

可以发现路径格式为 pathlib.PosixPath 这是在 unix 系统下的显示。在不同的系统上显示的格式也是不一样,在 windows 系统会显示为 WindowsPath。但是不管什么显示类型,都不影响后面的操作。

前面我们提到过可以通过把字符串类型的路径,转换为 Pathlib.Path 类型的路径,经过测试发现在 Python3.4 以后很多模块以及支持该格式的路径。不用转为成字符串使用了。
使用方法如下:

import pathlib
DIR_PATH = pathlib.Path("/Users/chennan/CDM")
print(DIR_PATH,type(DIR_PATH))

输出内容:

/Users/chennan/CDM <class 'pathlib.PosixPath'>

比起 os.path.join 拼接路径的方式,pathlib 使用起来更加的方便, 使用示例如下:

import pathlib
DIR_PATH = pathlib.Path("/Users/chennan/CDM") / "2000"
print(DIR_PATH,type(DIR_PATH))

输出:

/Users/chennan/CDM/2000 <class 'pathlib.PosixPath'>

通过 “/” 我们就可以对路径进行拼接了.