前言
大家好,我是 倔强青铜三 。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!
欢迎来到 苦练Python第57天!
今天让我们来入门学习pathlib
模块。
在 Python 编程中,文件操作一直是一个高频需求,但传统的文件路径处理方式常常让人头疼不已。
路径拼接、文件查找、目录遍历等操作,稍不注意就会出错,而且代码冗长难懂。
不过别担心,Python 3 的 pathlib
模块来拯救这一切啦!
今天,就让我们一起深入探索 pathlib
的强大功能,用它来简化文件操作,让代码更加优雅、高效,从此告别那些繁琐的文件处理烦恼!
一、初识 pathlib:面向对象的文件系统路径
pathlib
是 Python 3.4 新增的一个标准库模块,它提供了一种面向对象的方式来处理文件系统路径。
与传统的 os.path
模块相比,pathlib
更加直观、易用,而且功能强大。
它将文件路径视为对象,通过对象的方法和属性来操作路径,而不是像 os.path
那样使用函数来处理字符串路径。
pathlib
中有两个主要的类:PurePath
和 Path
。
PurePath
是纯路径类,它只提供路径的计算操作,不涉及实际的文件系统 I/O 操作,适用于跨平台的路径操作。
而 Path
是具体路径类,它继承自 PurePath
,并且提供了对文件系统的实际操作,比如读写文件、创建目录等。
二、基础操作:创建路径和文件夹
(一)创建路径对象
使用 Path
类可以轻松创建路径对象。你可以直接传入路径字符串,或者通过多个路径段来构造路径。
python
from pathlib import Path
# 创建一个路径对象
p = Path('/etc/hosts')
print(p)
# 使用多个路径段创建路径
q = Path('/etc') / 'hosts'
print(q)
在 Windows 系统上,Path
会自动识别路径风格并创建对应的 WindowsPath
对象,而在其他系统上则会创建 PosixPath
对象。
(二)创建文件夹
Path
类提供了 mkdir()
方法来创建文件夹。你可以指定文件夹的路径,并且可以选择是否创建父级目录。
python
# 创建一个文件夹
Path('my_folder').mkdir()
# 创建多级文件夹
Path('my_folder/sub_folder').mkdir(parents=True, exist_ok=True)
在上面的代码中,parents=True
表示如果父级目录不存在,也会一并创建;exist_ok=True
表示如果目录已经存在,不会抛出异常。
三、文件操作:读写文件轻松搞定
(一)打开文件
Path
类的 open()
方法可以用来打开文件,它的用法和内置的 open()
函数类似。
python
# 打开文件并读取内容
with Path('example.txt').open() as f:
content = f.read()
print(content)
(二)读写文本文件
pathlib
提供了 read_text()
和 write_text()
方法,让你可以轻松地读写文本文件。
python
# 写入文本文件
Path('example.txt').write_text('Hello, pathlib!')
# 读取文本文件
content = Path('example.txt').read_text()
print(content)
(三)读写二进制文件
对于二进制文件,pathlib
也有对应的 read_bytes()
和 write_bytes()
方法。
python
# 写入二进制文件
Path('example.bin').write_bytes(b'\x00\x01\x02')
# 读取二进制文件
data = Path('example.bin').read_bytes()
print(data)
四、路径操作:灵活处理文件路径
(一)路径拼接
使用 /
运算符可以方便地拼接路径。
python
# 拼接路径
p = Path('/etc')
q = p / 'hosts'
print(q)
(二)获取路径信息
你可以通过路径对象的属性来获取路径的各种信息,比如文件名、扩展名、父级目录等。
python
# 获取文件名
print(Path('example.txt').name)
# 获取文件扩展名
print(Path('example.txt').suffix)
# 获取父级目录
print(Path('example.txt').parent)
(三)路径匹配
pathlib
提供了 match()
和 full_match()
方法,可以用来匹配路径模式。
python
# 匹配文件扩展名
print(Path('example.txt').match('*.txt'))
# 匹配完整路径
print(Path('/etc/hosts').full_match('/etc/*.conf'))
五、文件查询:查找文件从未如此简单
(一)列出目录内容
Path
类的 iterdir()
方法可以用来列出目录中的文件和子目录。
python
# 列出目录内容
for item in Path('.').iterdir():
print(item)
(二)使用 glob 模式查找文件
glob()
方法支持使用 glob 模式来查找文件,比如 *.py
表示查找所有扩展名为 .py
的文件。
python
# 查找当前目录下所有 Python 文件
for file in Path('.').glob('*.py'):
print(file)
rglob()
方法则是递归地查找文件,它会在所有子目录中查找匹配的文件。
python
# 递归查找所有 Python 文件
for file in Path('.').rglob('*.py'):
print(file)
(三)检查文件类型和状态
你可以使用 is_file()
、is_dir()
等方法来检查路径是否指向文件或目录,还可以使用 exists()
方法来检查路径是否存在。
python
# 检查路径是否指向文件
print(Path('example.txt').is_file())
# 检查路径是否指向目录
print(Path('my_folder').is_dir())
# 检查路径是否存在
print(Path('example.txt').exists())
六、文件操作:重命名、删除、移动文件
(一)重命名文件
rename()
方法可以用来重命名文件或目录。
python
# 重命名文件
Path('example.txt').rename('new_example.txt')
(二)删除文件
unlink()
方法可以用来删除文件,而 rmdir()
方法可以用来删除空目录。
python
# 删除文件
Path('example.txt').unlink()
# 删除空目录
Path('my_folder').rmdir()
(三)移动文件
replace()
方法可以用来移动文件或目录,它会替换目标路径的内容。
python
# 移动文件
Path('example.txt').replace('new_location/example.txt')
七、高级用法:链接、权限和更多
(一)创建符号链接
symlink_to()
方法可以用来创建符号链接。
python
# 创建符号链接
Path('link_to_example.txt').symlink_to('example.txt')
(二)修改文件权限
chmod()
方法可以用来修改文件的权限。
python
# 修改文件权限
Path('example.txt').chmod(0o755)
(三)获取文件所有权信息
owner()
和 group()
方法可以用来获取文件的所有者和所属组。
python
# 获取文件所有者
print(Path('example.txt').owner())
# 获取文件所属组
print(Path('example.txt').group())
八、实战案例:用 pathlib 构建一个文件管理工具
现在,让我们用 pathlib
来构建一个简单的文件管理工具。这个工具可以列出目录中的文件、查找特定类型的文件、复制文件、删除文件等。
python
from pathlib import Path
class FileManager:
def __init__(self, base_path):
self.base_path = Path(base_path)
def list_files(self):
for item in self.base_path.iterdir():
print(item)
def find_files(self, pattern):
for file in self.base_path.rglob(pattern):
print(file)
def copy_file(self, src, dst):
with Path(src).open('rb') as f_src:
with Path(dst).open('wb') as f_dst:
f_dst.write(f_src.read())
def delete_file(self, file_path):
Path(file_path).unlink()
# 使用文件管理工具
manager = FileManager('.')
manager.list_files()
manager.find_files('*.py')
manager.copy_file('example.txt', 'new_example.txt')
manager.delete_file('new_example.txt')
通过上面的代码,我们可以看到 pathlib
让文件操作变得非常简单和直观。无论是路径操作、文件读写,还是文件查询和管理,pathlib
都提供了强大的功能和简洁的接口。
九、总结:pathlib 让文件操作变得优雅
通过今天的苦练,我们深入探索了 Python 3 的 pathlib
模块。
pathlib
的优势在于它的直观性和易用性。它将文件路径视为对象,通过对象的方法和属性来操作路径,这使得代码更加清晰、易读。而且,pathlib
的功能非常全面,涵盖了文件操作的各个方面,从简单的文件读写到复杂的文件查询和管理。
虽然 pathlib
的性能可能略低于底层的 os.path
模块(因为它用纯 Python 实现,而 os.path
用 C 实现),但在大多数情况下,这种性能差异是可以忽略不计的。
而且,pathlib
的规范化路径处理和面向对象的设计,使得它在代码的可维护性和可读性方面具有明显优势。
所以,下次当你需要处理文件路径时,不妨试试 pathlib
模块吧!它会让你的代码更加优雅、高效,让你的编程之旅更加顺畅。
最后感谢阅读!欢迎关注我,微信公众号 :
倔强青铜三
。一键三连(点赞、收藏、关注)!