os.path 模块用法详解

题图:by natgeo from Instagram

阅读文本大概需要 6 分钟。

总所周知,Windows 操作系统和 Linux 系统存在很多不兼容的地方。文件路径就是一个明显的例子。在 Linux 中,路径的分割采用正斜杠 "/",比如 "/home/monkey";而在 Windows 中,路径分隔采用反斜杠 "\",比如 "C:\Windows\System"。

我们在编码过程中,往往需要和文件或文件夹打交道。如果程序中涉及到到路径操作,我们最好使用 Python 标准库中的 os.path 模块来实现。这样能避免出现程序无法多平台运行的问题。

os.path 全称是Common pathname manipulations, 译为通用路径名操作。其作用是提供操作各种处理文件名以及路径名的函数。因此,本文的内容是讲述os.path模块中几个常见函数的用法。

1 获取文件(夹)绝对路径

abspath(path) 函数返回的是 path 经过规范化的绝对路径。假设在 D 盘中有 Downloads 的文件夹,该文件夹中有叫 cat.jpg 的图片。我们要获取这张图片的经过转椅的绝对路径,可以在 Downloads 文件夹中打开 DOS 窗口,然后进入 Python 环境。

# 先引用 os 标准库
import os
os.path.abspath('cat.jpg')
>> 'D:\\Downloads\\cat.jpg'

2 从路径中切割出文件名

split(path) 函数的作用是将传入的 path 分割成目录和文件名,然后以元组形式返回。

import os
# Downloads 文件夹下有个 cat.jpg 的图片
os.path.split('D:\\Downloads\\cat.jpg')
>> ('D:\\Downloads', 'cat.jpg')

# Downloads 文件夹下有个 animal 的文件夹
os.path.split('D:\\Downloads\\animal')
>> ('D:\\Downloads', 'animal')

# 如果 path 是以两个反斜杠 \\ 结尾,则返回空
os.path.split('D:\\Downloads\\')
>> ('D:\\Downloads', '')

3 将多个文件路径合并

多个路径组合合并需要用到函数 join(path1, path2, ...)。join 函数合并路径有个特点:在所有 path 参数中,只会从第一个绝对路径的参数开始合并。这也意味着第一个绝对路径之前的参数将被忽略。

import os
os.path.join('Downloads', 'D:\\', 'animal')
>> 'D:\\animal'

# 第一个参数是绝对路径,则按顺序合并
os.path.join('D:\\', 'Downloads', 'animal')
>> 'D:\\Downloads\\animal'

4 判断路径是否存在

exists(path) 函数是判断一个文件或者文件夹的路径是否存在。如果 path 存在,返回 True;如果 path 不存在,则返回 False;

import os

# D 盘确实有个 Downloads 的文件夹
os.path.exists('D:\\Downloads\\')
>> True

# Downloads 还有个 animal 的文件夹
os.path.exists('D:\\Downloads\\animal\\')
>> True

# D 盘没有名为 cat 的文件夹
os.path.exists('D:\\cat\\')
>> False

5 判断路径是否是一个存在的文件

判断 path 是否是一个存在文件,函数 isfile(path) 就能轻松搞定。如果 path 是一个存在的文件,返回True。否则返回 False。

import os

os.path.isfile('D:\\Downloads\\cat.jpg')
>> True

os.path.isfile('D:\\Downloads\\animal')
>> False

6 将路径规范化

normcase(path) 的作用是解决操作系统间路径分割符的兼容性。在 Linux 和 Mac 平台上,该函数会原样返回path,在 Windows 平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠。

import 

# Linux 系统下
os.path.normcase('/home/monkey')
>> '/home/monkey'

# Window 系统下
os.path.normcase('D:/download\\animal')
>> 'd:\\download\\animal'

除了上述的常用函数之外,os.path 还有其他函数。感兴趣的同学浏览 Python 官网文档。

https://docs.python.org/3/library/os.path.html

原文发布于微信公众号 - 极客猴(Geek_monkey)

原文发表时间:2018-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

Node.js 版本管理器: nvm 介绍

有时候,我们需要测试写的 Nodejs 的程序在不同 Nodejs 版本下是否能正常运行;或是我们想要尝试下最新版 Nodejs 的新特性,但常用的代码需要旧版...

921
来自专栏有趣的Python和你

用python偷懒Arcgis(地类编码转地类名称)excel数据python代码arcgis操作

1143
来自专栏idba

轻量级分布式任务调度系统-RQ

一 前言 Redis Queue 一款轻量级的P分布式异步任务队列,基于Redis作为broker,将任务存到redis里面,然后在后台执行指定...

3593
来自专栏Python小屋

使用with关键字让你的Python代码更加Pythonic

首先解释一下上一篇文章Python科学计算扩展库numpy中的广播运算中最后的小题目,该题目答案是一个元组(True, 5),原因在于Python中的等号=虽然...

3638
来自专栏耕耘实录

几个Linux命令及脚本使用中的奇淫巧技

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1052
来自专栏C/C++基础

C++覆盖或删除指定位置的文件内容

我们经常使用ofstream或者fstream可写文件,使用ifstream可以写文件,但需要设置文件的打开状态为ios::out。C++中IO流打开模式使用位...

1353
来自专栏禅林阆苑

redis学习笔记

优点: 高并发读写性能、大数据量扩展(分布式存储)、配置简单、操作与数据模型灵活高效、成本 低廉

1884
来自专栏数据结构笔记

Django搭建博客(九):为博客添加代码高亮显示和 md文档支持

特别需要注意的是:代码块必须使用三个 '`' 符号包裹起来才能正确识别,语言标记可有可无,但是三个 '`' 必须单独成行。

2893
来自专栏Petrichor的专栏

AttributeError: 'module' object has no attribute 'fullmatch'.

经过查找,发现出错的原因是 re库 中的 fullmatch函数 是 在py3.4之后才新添加的 。

3213
来自专栏Python绿色通道

Python的进程

Python实现多进程的方式主要有两种:一种方法是使用os模块中的fork方法; 另一种是使用multiprocessing模块。这两种方法的区别在于前者仅适用...

1092

扫码关注云+社区

领取腾讯云代金券