os.path库:Python操作和处理文件路径(二)

简介: os.path库:Python操作和处理文件路径(二)

建立路径


Join()

在实际的项目中,我们除了进行路径的分解以外,我们还可能会从其他字符串建立路径。要将多个路径组成一个值,可以使用join()。具体代码如下所示:

import os
paths = [['one', 'two', 'thress'], ['/', 'tow', 'one', 'three'], ['/one', '/two', '/three']]
for path in paths:
    print(path)
    print(os.path.join(*path))


运行之后,效果如下:


需要注意的是,如果链接的参数有“/”开头,那么前面所有的参数将会被丢弃,如/three一样。


expanduser()

os.path还提供了直接主目录名拼接方法:expanduser()。它会将字符串“~”开头的路径转换为主目录路径。具体代码如下:

import os
paths = ['~Data','~Temp','~Hello']
for path in paths:
    print(path)
    print(os.path.expanduser(path))


运行之后,效果如下:


expandvars()

expandvars()函数会扩展路径中所有出现的shell环境变量。例如:

import os
os.environ['LYJ']="liyuanjing"
print(os.path.expandvars('/user/$LYJ'))


运行之后,效果如下:


格式化路径


在实际的路径拼接中,如果我们的字符串本身不规则,比如使用了两个或多个“/”,亦或者是其他字符,造成路径格式本身错误。那么,我们就需要对路径进行格式化处理,具体的格式化函数为:normpath()。


示例如下:

import os
paths = ['Data/../yello','Temp//liyuanjing','Hello/./world']
for path in paths:
    print('{}    :     {}'.format(path,os.path.normpath(path)))


运行之后,效果如下:


需要注意的是,在字符串路径中,发现…/会直接删除前面所有路径字符串。


绝对路径转换


在程序中,除了有上面这些相对路径之外,还会有绝对路径。那么,如果将所有相对路径转换为绝对路径呢?


我们先来看一段代码:

import os
os.chdir('C:/Users')
paths = ['../', 'Temp/liyuanjing', './world']
for path in paths:
    print('{}    :     {}'.format(path, os.path.abspath(path)))


运行之后,效果如下:


文件属性获取


在实际的文件处理中,我们可能还会获取各种文件的属性用于参考。比如获取文件的创建时间,访问时间,修改时间以及文件的大小(字节)等。


示例如下:

import os
path=r"E:\Project\python\base_demo\英文文档1.txt"
print(path)
print('文件创建时间:{}'.format(os.path.getctime(path)))
print('文件访问时间:{}'.format(os.path.getatime(path)))
print('文件修改时间:{}'.format(os.path.getmtime(path)))
print('文件大小:{}字节'.format(os.path.getsize(path)))


运行之后,效果如下:


判断文件


在程序中进行文件操作时,往往我们会进行容错判断,用于获取文件路径指的是一个文件还是一个目录,另外哪怕文件路径正确,我们还要判断文件是否确实存在,这些都是必不可少的步骤。


os.path给我们提供了很多测试文件的条件的函数,如下表所示:

函数名

意义
exists(path) 判断 path 对应的文件是否存在,如果存在,返回 True;反之,返回 False
lexists(path) 判断路径是否存在,如果存在,则返回 True;反之,返回 False
isabs(path) 判断是否为绝对路径
isfile(path) 判断路径是否为文件
isdir(path) 判断路径是否为目录
islink(path) 判断路径是否为链接文件(类似 Windows 系统中的快捷方式)
ismount(path) 判断路径是否为挂载点
sameopenfile(fp1, fp2) 判断 fp1 和 fp2 是否指向同一文件
relpath(path[, start]) 从 start 开始计算相对路径。
samefile(path1, path2) 判断目录或文件是否相同。
samestat(stat1, stat2) 判断 stat1 和 stat2 是否指向同一个文件。

测试代码如下:

import os
path = r"E:\Project\python\base_demo\英文文档1.txt"
print(path)
print('文件是否存在:{}'.format(os.path.exists(path)))
print('路径是否存在:{}'.format(os.path.lexists(path)))
print('是否为绝对路径:{}'.format(os.path.isabs(path)))
print('路径是否为文件:{}'.format(os.path.isfile(path)))
print('路径是否为目录:{}'.format(os.path.isdir(path)))
print('路径是否为链接文件:{}'.format(os.path.islink(path)))
print('路径是否为挂载点:{}'.format(os.path.ismount(path)))
print('是否指向同一文件:{}'.format(os.path.sameopenfile(os.open(path, os.O_RDONLY), os.open(path, os.O_RDONLY))))
print('path的真实路径:{}'.format(os.path.realpath(r'python\base_demo\英文文档1.txt')))
print('从 start 开始计算相对路径:{}'.format(os.path.relpath(path, 'python')))
print('判断目录或文件是否相同:{}'.format(os.path.samefile(path, path)))


运行之后,效果如下:

相关文章
|
2天前
|
存储 JSON API
Pydantic:目前最流行的Python数据验证库
在处理来自系统外部的数据,如API、终端用户输入或其他来源时,我们必须牢记开发中的一条基本原则:“永远不要相信用户的输入”。 因此,我们必须对这些数据进行严格的检查和验证,确保它们被适当地格式化和标准化。这样做的目的是为了确保这些数据符合我们的程序所需的输入规范,从而保障项目能够正确且高效地运行。
|
3天前
|
存储 缓存 索引
Python中的NumPy库详解
Python中的NumPy库详解
|
6天前
|
XML 自然语言处理 关系型数据库
CasADi - 最优控制开源 Python/MATLAB 库4
CasADi - 最优控制开源 Python/MATLAB 库
17 4
|
5天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
8 2
|
5天前
|
存储 网络协议 Python
Python如何用PyModbus库进行Modbus TCP通信
使用python解决工业通信问题是一个非常好的选择,python具有丰富的生态,可以轻松解决工业通信的各种问题。 本篇主要介绍使用pymodbus库进行modbus tcp仿真,实现pc端读取plc或工业设备modbus变量。
|
Python
Python编程:从网络地址中解析出系统文件路径
Python编程:从网络地址中解析出系统文件路径
125 0
|
7天前
|
算法 程序员 开发工具
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
在学习Python的旅程中你是否正在“绝望的沙漠”里徘徊? 学完基础教程的你,是否还在为选择什么学习资料犹豫不决,不知从何入手,提高自己?
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
|
5天前
|
算法 程序员 开发工具
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
在学习Python的旅程中你是否正在“绝望的沙漠”里徘徊? 学完基础教程的你,是否还在为选择什么学习资料犹豫不决,不知从何入手,提高自己?
|
3天前
|
数据采集 存储 人工智能
掌握Python编程:从基础到进阶的实用指南
【8月更文挑战第17天】 本文旨在通过浅显易懂的语言和实际案例,为初学者和有一定基础的开发者提供一条清晰的Python学习路径。我们将从Python的基本语法入手,逐步深入到面向对象编程、数据科学应用及网络爬虫开发等高级主题。每个部分都配备了代码示例和实操建议,确保读者能够将理论知识转化为实际能力。无论你是编程新手,还是希望提升Python技能的开发者,这篇文章都将为你打开一扇通往高效编程世界的大门。
7 2
|
7天前
|
Python
python Process 多进程编程
python Process 多进程编程
17 1