Introduction to the Python Pathlib Module
Python中的Pathlib模块简化了处理文件和文件夹的方式。 Python 3.4及更高版本提供Pathlib模块。 它结合了Python最好的文件系统模块,即os,os.path,glob等。
在Python中,大多数脚本都涉及与文件系统的交互。 因此,处理文件名和路径很重要。 为此,Python包含Pathlib模块,该模块包含执行与文件有关的任务的有用功能。 通过将文件系统路径表示为适当的对象,Pathlib提供了一种更易读,更轻松的方式来构建路径,并使我们能够编写可跨平台移植的代码。
在本文中,我们将借助各种示例详细研究Pathlib模块。
路径和目录的概念
在深入探讨Pathlib模块的细节之前,重要的是要理解两个不同的概念,即-路径和目录。
该路径用于标识文件。 该路径提供了一个可选的目录名称序列,该目录名称以最终文件名(包括文件扩展名)终止。 文件扩展名提供了有关文件格式/内容的一些信息。 Pathlib模块可以处理绝对路径和相对路径。 绝对路径从根目录开始,并指定完整的目录树,而顾名思义,相对路径是文件相对于另一个文件或目录(通常是当前目录)的路径。
目录代表路径的文件系统条目,其中包括文件名,创建时间,大小,所有者等。
Python中的Pathlib模块处理与路径相关的任务,例如根据文件名和其他路径构造新路径,检查路径的各种属性以及在特定路径下创建文件和文件夹。
如何使用Pathlib模块?
为了在脚本中方便地使用pathlib模块,我们使用以下命令导入其中的所有类:
1 | from pathlib import * |
首先,让我们使用以下代码分别检索当前的工作目录和主目录对象:
1 2 3 4 | current_dir = Path.cwd() home_dir = Path.home() print(current_dir) print(home_dir) |
我们可以选择
1 2 3 4 5 6 | import pathlib current_dir = pathlib.Path.cwd() home_dir = pathlib.Path.home() print(current_dir) print(home_dir) |
为什么要使用Pathlib模块?
如果您使用Python语言已有一段时间,您会想知道当
假设我们要在当前工作目录中创建一个名为" output / output.xlsx"的文件。 以下代码尝试使用
1 2 3 | import os outpath = os.path.join(os.getcwd(), 'output') outpath_file = os.path.join(outpath, 'out.xlsx') |
交替,
1 | outpath_file = os.pathjoin(os.path.join(os.getcwd(), 'output'),"out.xlsx") |
尽管该代码可以正常工作,但它看起来很笨拙,不可读也不易于维护。 想象一下,如果我们想在多个嵌套目录中创建一个新文件,该代码将如何显示。
可以使用Pathlib模块重写相同的代码,如下所示:
1 2 | from pathlib import Path outpath = Path.cwd() / 'output' / 'output.xlsx' |
这种格式更容易从心理上解析。 在Pathlib中,使用
Pathlib模块提供的方法的另一个好处是,创建了
在路径上执行操作
经典的
让我们使用
使用
1 2 | if os.path.isdir(path): os.rmdir(path) |
如果我们使用Pathlib模块的
1 2 | if path.is_dir() path.rmdir() |
在
1 2 3 4 5 6 7 8 | outpath = os.path.join(os.getcwd(), 'output') outpath_tmp = os.path.join(os.getcwd(), 'output.tmp') generate_data(output_tmp) if os.path.getsize(output_tmp): os.rename(outpath_tmp, outpath) else: # Nothing produced os.remove(outpath_tmp) |
在此,函数
变量
使用
让我们尝试使用Pathlib模块重写以上代码。
1 2 3 4 5 6 7 8 9 10 11 | from pathlib import Path outpath = Path.cwd() / 'output' outpath_tmp = Path.cwd() / 'output_tmp' generate_data(output_tmp) if outpath_tmp.stat().st_size: outpath_tmp.rename(outpath) else: # Nothing produced Path_tmp.unlink() |
使用Pathlib,os.getcwd()成为Path.cwd(),并且'/'运算符用于连接路径,并代替os.path.join。 使用Pathlib模块,可以使用运算符和方法调用以更简单的方式完成操作。
以下是常用的方法及其用法:
生成跨平台路径
路径在不同的操作系统中使用不同的约定。 Windows在文件夹名称之间使用反斜杠,而所有其他流行的操作系统在文件夹名称之间使用正斜杠。 如果要使python代码正常运行,而与底层操作系统无关,则需要处理特定于底层平台的不同约定。 Pathlib模块使使用文件路径更加容易。 在Pathlib中,无论操作系统如何,都可以使用正斜杠将路径或文件名传递给
1 | pathlib.Path.home() / 'python' / 'samples' / 'test_me.py' |
对于基础操作系统,
获取路径信息
在处理路径时,我们有兴趣查找文件/文件夹的父目录或跟随符号链接。 路径类具有几种方便的方法来执行此操作,因为路径的不同部分可以用作属性,包括以下内容:
在路径" /home/projects/stackabuse/python/sample.md"中:
地球模块的替代方案
除了
1 2 3 4 | from glob import glob top_xlsx_files = glob('*.xlsx') all_xlsx_files = glob('**/*.xlsx', recursive=True) |
pathlib还提供了glob实用程序:
1 2 3 4 | from pathlib import Path top_xlsx_files = Path.cwd().glob('*.xlsx') all_xlsx_files = Path.cwd().rglob('*.xlsx') |
Glob功能可用于
使用Pathlib读写文件
以下方法用于执行基本操作,例如读写文件:
让我们探讨Pathlib模块用于常见文件操作的用法。 以下示例用于读取文件的内容:
1 2 | path = pathlib.Path.cwd() / 'Pathlib.md' path.read_text() |
这里,
下面的示例用于以文本模式将数据写入文件:
1 2 3 | from pathlib import Path p = Path('sample_text_file') p.write_text('Sample to write data to a file') |
因此,在Pathlib模块中,通过将路径作为对象,可以使我们对文件系统的对象执行有用的操作,包括创建或删除目录,查找特定文件,移动文件等许多路径操作。
结论
总而言之,Pathlib模块提供了大量丰富而有用的功能,可用于执行各种与路径相关的操作。 另外一个优点是,库在基础操作系统之间是一致的。