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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: os.path库:Python操作和处理文件路径(一)

前言


os.path是平台独立的文件名管理库,使用该库能够很方便来处理多个平台上的文件。即使程序不打算在平台之间移值,也应当使用os.path库来完成可靠的文件名解析。


本篇博文将详细介绍os.path库的用法。


解析路径的基本用法


os.path中的第一组函数可以用来将表示文件名的字符串解析为文件名的各个组成部分。这些函数并不要求路径真正存在,它们只是单纯的处理字符串而已。


常用的解析函数如下:

import os
paths = ["D:/document/csdn/opencv/20/10.png",
         "D:/document/csdn/opencv/20/",
         "D:/document/csdn/opencv/20",
         "d:" + os.sep + "10" + os.extsep + "txt",
         os.pardir + os.sep + "10" + os.extsep + "txt",
         os.curdir + os.sep + "10" + os.extsep + "txt", ]
for path in paths:
    print(path)
    print(os.path.split(path))


运行之后,效果如下:

os.sep:路径分隔符,字符串“/”或者“\”


os.extsep:文件名后缀的字符串“.”(点)


os.pardir:目录上一级,字符串“…”(双点)


os.curdir:当前目录,字符串“.”(点)


os.path.split:分割路径为两部分元组,第2个元素为路径最后的部分,可能是文件名,可能是空。第2个元素是前面的路径不包括文件名。


dirname()与basename()


当然,我们还可以不使用os.path.split进行分割,直接使用dirname()与basename()函数返回这两部分,具体代码如下:

import os
paths = ["D:/document/csdn/opencv/20/10.png",
         "D:/document/csdn/opencv/20/",
         "D:/document/csdn/opencv/20",
         "d:" + os.sep + "10" + os.extsep + "txt",
         os.pardir + os.sep + "10" + os.extsep + "txt",
         os.curdir + os.sep + "10" + os.extsep + "txt", ]
for path in paths:
    print(path)
    print(os.path.dirname(path))
    print(os.path.basename(path))


运行之后,效果如下:

dirname():返回文件路径最后一个分隔符前的路径


basename():返回文件路径最后一个分隔符后面的内容


splitext()与commonprefix()


splitext()函数与split()类似,不过它会根据扩展名分隔符而不是目录分隔符来分解路径。一般我们用该方法与前面的basename()结合获取文件名。具体代码如下:

import os
path = "D:/document/csdn/opencv/20/10.png"
filename = os.path.basename(path)
print(os.path.splitext(filename))


这里,我们会得到文件名以及后缀。运行效果如下:


当然,这是在存在文件名的情况下,如果只是单纯的路径,我们会得到空字符串。而如果直接跳过basename(),我们会得到前面的路径加文件名。


至于commonprefix()函数,它是用于判断一堆路径是否具有统一的公共前缀,如果有返回公共前缀。具体代码如下:

import os
paths = ["D:/document/csdn/opencv/20/10.png",
         "D:/document/csdn/opencv/20/",
         "D:/document/csdn/opencv/20",]
for path in paths:
    print(path)
print("公共前缀")
print(os.path.commonprefix(paths))


运行之后,效果如下:

相信大家测试的时候,发现了一个差不多的函数:commonpath()。该函数的才是我们最长使用的,因为commonprefix()有缺陷,我们先来看一段代码:

import os
paths = ["D:/document/csdn/opencv/20/10.png",
         "D:/document/csdn/opencv/2011111",
         "D:/document/csdn/opencv/20",]
for path in paths:
    print(path)
print("公共前缀")
print(os.path.commonpath(paths))
print(os.path.commonprefix(paths))


运行之后,效果如下:


可以看到,commonpath()函数返回的是共同的路径前缀,而commonprefix()虽然返回的路径存在,但不是共同的路径前缀,因为2011111是一个文件,commonprefix()将其裁成(20,1111)了。

相关文章
|
2天前
|
存储 JSON API
Pydantic:目前最流行的Python数据验证库
在处理来自系统外部的数据,如API、终端用户输入或其他来源时,我们必须牢记开发中的一条基本原则:“永远不要相信用户的输入”。 因此,我们必须对这些数据进行严格的检查和验证,确保它们被适当地格式化和标准化。这样做的目的是为了确保这些数据符合我们的程序所需的输入规范,从而保障项目能够正确且高效地运行。
|
3天前
|
存储 缓存 索引
Python中的NumPy库详解
Python中的NumPy库详解
|
6天前
|
XML 自然语言处理 关系型数据库
CasADi - 最优控制开源 Python/MATLAB 库4
CasADi - 最优控制开源 Python/MATLAB 库
17 4
|
6天前
|
Linux API C++
CasADi - 最优控制开源 Python/MATLAB 库3
CasADi - 最优控制开源 Python/MATLAB 库
20 4
|
6天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
9 2
|
5天前
|
存储 网络协议 Python
Python如何用PyModbus库进行Modbus TCP通信
使用python解决工业通信问题是一个非常好的选择,python具有丰富的生态,可以轻松解决工业通信的各种问题。 本篇主要介绍使用pymodbus库进行modbus tcp仿真,实现pc端读取plc或工业设备modbus变量。
|
6天前
|
自然语言处理 算法 API
CasADi - 最优控制开源 Python/MATLAB 库2
CasADi - 最优控制开源 Python/MATLAB 库
11 0
|
1月前
|
Python
确保你已经安装了`python-barcode`库。如果没有,可以通过pip来安装:
确保你已经安装了`python-barcode`库。如果没有,可以通过pip来安装:
|
2月前
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串'2a'。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
42 1
|
Linux Python
不可出外网的主机如何快速、方便、优雅的安装Python库?
不可出外网的主机如何快速、方便、优雅的安装Python库?
486 0
不可出外网的主机如何快速、方便、优雅的安装Python库?