Pathlib库:Python面向对象的文件路径处理(二)

简介: Pathlib库:Python面向对象的文件路径处理(二)

获取当前路径下的所有文件路径


在编写文件夹应用之时,我们每访问一个目录都会显示该目录下的所有文件与文件夹。而Pathlib库也能够做到这些,具体代码很简单,迭代iterdir()就行,示例如下:

import pathlib
one = pathlib.Path.cwd()
two = pathlib.Path('.')
for f1, f2 in zip(one.iterdir(), two.iterdir()):
    print('{} : {}'.format(f1, f2))


运行之后,效果如下:


设置条件获取文件(glob()与rglob())

在遍历获取文件时,我们可能并不需要获取所有文件,而只要获取某些特定后缀的文件。比如上面的目录中,我们只需要txt后缀的文本怎么办?


可以直接使用glob()进行过滤,示例如下:

import pathlib
one = pathlib.Path('.')
for f in one.glob('*.txt'):
    print(f)


运行之后,效果如下:

glob()与rglob()不同之处,在于rglob()是递归的,比如这层测试目录一直有一个.idea文件夹,使用glob()不会遍历到.idea文件夹里面的文件,而rglob()就会,而且只要继续有层级,会一直遍历符合条件的数据。


示例如下:

import pathlib
one = pathlib.Path('.')
for f in one.rglob('*'):
    print(f)


运行之后,效果如下:


读写文件


既然通过Pathlib库管理文件非常的方便,那么它能过读写文件,是不是就是一个完美的文件操作库呢?


其实,Pathlib库还真能直接对文件进行读写。下面,我们随机创建一个文件进行读写操作,示例如下:

import pathlib
f = pathlib.Path('text.txt')
f.write_bytes("My name is Li Yuanjing".encode('utf-8'))
with f.open('r',encoding='utf-8') as content:
    print(content.read())
print(f.read_text('utf-8'))


运行之后,效果如下:


这里,我们使用2种读取文件的方式,一种是通过with f.open()读取文件,一种是直接使用read_text()进行读取。唯一不同的是,如果要一行一行读取,可能前一种方式更合适。而写入文件直接使用write_bytes()函数就行,不过需要记得给写入内容指定编码。(当然直接写字符串可以用write_text()函数)


至于创建文件夹,直接使用f.mkdir()就行。


删除文件夹


在实际的文件操作中,我们还需要删除文件夹或者文件。而Pathlib库给我们提供了rmdir()函数进行空文件夹的删除,示例如下:

import pathlib
f = pathlib.Path('123')
f.rmdir()


如果文件夹不是空的,会直接报错,当然如果是空的就直接成功删除了。


如果是要删除文件,可以使用unlink()函数进行操作,示例如下:

import pathlib
f = pathlib.Path('a.txt')
f.unlink()


文件属性


在编写文件管理器应用时,我们往往还会获取文件的属性,比如创建时间,修改时间等等。Pathlib库可以很方便的获取这些数据的集合,示例如下:

import pathlib
f = pathlib.Path('英文文档.txt')
stat_info=f.stat()
print(stat_info)


运行之后,效果如下:


这里一共获取到文件的10个属性,具体含义如下表:

参数

含义
st_mode inode 保护模式
st_ino inode 节点号
st_dev inode 驻留的设备
st_nlink inode 的链接数
st_uid 所有者的用户ID
st_gid 所有者的组ID
st_size 普通文件以字节为单位的大小;包含等待某些特殊文件的数据
st_atime 上次访问的时间

st_mtime

最后一次修改的时间
st_ctime 创建时间


文件判断


os.path库有一大堆返回布尔类型的函数进行文件的判断,同样的Pathlib库也可以进行这些判断。博主这里列出了一张表格,判断文件的函数如下:

函数

意义
exists()

判断文件或文件夹是否存在

is_dir()

判断路径是否为文件夹

is_file() 判断路径是否为文件
is_symlink()

判断路径文件是否为快捷方式

is_socket()

是否是socket文件

is_fifo()

是否为管道

is_block_device()

是否是块设备

is_char_device()

是否是字符设备

is_absolute()

是否是绝对路径


创建快捷方式


在Windows系统中,我们经常使用的桌面图标就是应用程序的快捷方式,真正的exe运行程序其实在安装目录,而通过Pathlib库我们也可以直接创建文件的快捷打开方式。示例如下:

import pathlib
f = pathlib.Path('1234.txt')
f.symlink_to('英文文档.txt')


运行之后,你会发现打开1234.txt也就是打开了英文文档.txt,两者内容一样。效果如下:


需要注意的是,直接运行程序会报错,因为Windows生成快捷方式需要管理员权限,所以在运行脚本时,记得一定要给权限。(以管理员的方式运行)

相关文章
|
2天前
|
存储 JSON API
Pydantic:目前最流行的Python数据验证库
在处理来自系统外部的数据,如API、终端用户输入或其他来源时,我们必须牢记开发中的一条基本原则:“永远不要相信用户的输入”。 因此,我们必须对这些数据进行严格的检查和验证,确保它们被适当地格式化和标准化。这样做的目的是为了确保这些数据符合我们的程序所需的输入规范,从而保障项目能够正确且高效地运行。
|
3天前
|
存储 缓存 索引
Python中的NumPy库详解
Python中的NumPy库详解
|
6天前
|
XML 自然语言处理 关系型数据库
CasADi - 最优控制开源 Python/MATLAB 库4
CasADi - 最优控制开源 Python/MATLAB 库
17 4
|
6天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
9 2
|
5天前
|
存储 网络协议 Python
Python如何用PyModbus库进行Modbus TCP通信
使用python解决工业通信问题是一个非常好的选择,python具有丰富的生态,可以轻松解决工业通信的各种问题。 本篇主要介绍使用pymodbus库进行modbus tcp仿真,实现pc端读取plc或工业设备modbus变量。
|
9月前
|
Python
一文学会Python面向对象中封装、继承、多态使用
一文学会Python面向对象中封装、继承、多态使用
95 0
|
2月前
|
Python
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
|
3月前
|
Python
Python进阶---面向对象 继承
Python进阶---面向对象 继承
20 1
|
9月前
|
Python
浅谈Python面向对象中的继承与mro
浅谈Python面向对象中的继承与mro
38 0
|
3月前
|
Python
07 Python面向对象的三大特点【封装、继承、多态】
07 Python面向对象的三大特点【封装、继承、多态】
17 0