os.path:平台独立的文件名管理
介绍
利用os.path模块中包含的函数,很容易编写代码来处理多个平台上的文件
解析路径
import os.path
'''
os.path中的第一组函数可以用来将表示文件名的字符串解析为文件名的各个组成部分。
这些函数并不要求路径真正存在:它们只是处理字符串。
'''
# os.sep:路径各部分之间的分隔符,例如/或者\
print(os.sep) # \
# os.extsep:文件与文件扩展名之间的分隔符
print(os.extsep) # .
# os.pardir:路径中表示目录树上一级的部分
print(os.pardir) # ..
# os.curdir:路径中表示当前目录的部分
print(os.curdir) # .
# split函数:将路径分解为两个部分,返回包含结果的元组
print(os.path.split(r"C:\python37")) # ('C:\\', 'python37')
print(os.path.split(r"C:\python37\python.exe")) # ('C:\\python37', 'python.exe')
# split函数的两部分,分别等价于dirname和basename
print(os.path.dirname(r"C:\python37"), "--", os.path.basename(r"C:\python37")) # C:\ -- python37
print(os.path.dirname(r"C:\python37\python.exe"), "--",
os.path.basename(r"C:\python37\python.exe")) # C:\python37 -- python.exe
'''
可以看到是以最后一个目录分隔符为基准的,C:\\aaa\\bbb\\ccc\\ddd, --> C:\\aaa\\bbb\\ccc ddd
'''
# 还有一个splitext函数,和split类似,但是是以扩展名分隔符为基准的
# 既然是以扩展名为基准,那么必须是文件才会有意义。
print(os.path.splitext(r"C:\python37")) # ('C:\\python37', '')
# 可以看到这里是个目录,因此得到('C:\\python37', '')。
# 但是之前也说过,这些函数不要求文件真的存在,而是把当成字符串像文件名一样处理
# 表示C盘下有一个python3.7文件,.7表示扩展名
print(os.path.splitext(r"C:\python3.7")) # ('C:\\python3', '.7')
print(os.path.splitext(r"C:\python37\python.exe")) # ('C:\\python37\\python', '.exe')
# 如果有多个扩展名分隔符,比如linux下的gz包,那么一最后一个扩展名分隔符为基准
print(os.path.splitext(r"C:\python37\hadoop.tar.gz")) # ('C:\\python37\\hadoop.tar', '.gz')
# 还记得os.path.split吗?是以目录分隔符为基准的,用它来分解会有什么效果呢
print(os.path.split(r"C:\python37\hadoop.tar.gz")) # ('C:\\python37', 'hadoop.tar.gz')
# commonprefix取一个路径列表作为参数,并且返回一个字符串,表示所有路径都出现的公共前缀
path = [r"C:\Go", r"C:\MinGW", r"C:\python37"]
print(os.path.commonprefix(path)) # C:\
print(os.path.commonprefix(path + [r"F:\\mmp"])) # 这里返回了一个空字符串,因为没有公共前缀
# 不过还有一个隐藏的问题
path = [r"C:\1\2\3", r"C:\1\2\4", r"C:\1\23\5"]
# 注意这里打印的是C:\1\2,所以这个函数没有考虑路径分隔符,是真的当成是字符串来处理,r"C:\1\23\5",把23没有作为整体处理
print(os.path.commonprefix(path)) # C:\1\2
# 那如何避免这种情况呢?可以使用commonpath,专门是解决这种情况的
print(os.path.commonpath(path)) # C:\1
建立路径
import os.path
'''
除了分解现有的路径,还经常需要从其他字符串建立路径。要将多个路径组成部分结合为一个值,可以使用join
'''
print(os.path.join("a", "b", "c")) # a\b\c
# ~表示家目录,expanduser可以自动识别
print(os.path.expanduser("~")) # C:\Users\satori
print(os.path.join(os.path.expanduser("~"), "666", "1.txt")) # C:\Users\satori\666\1.txt
# expandvars更为通用,因为它会扩展路径中出现的所有变量
import os
os.environ["Sherry"] = "啊,雪莉" # 设置环境变量
# 那么可以使用$的形式,类似于shell
print(os.path.expandvars(r"C:\python37\$Sherry")) # C:\python37\啊,雪莉
规范化路径
import os.path
'''
使用join或利用嵌入变量由单独的字符串组合路径时,得到的路径最后可能会有多余的分隔符或相对路径部分。使用normpath可以清除这些内容
'''
print(os.path.normpath(r"one\..\two\.\three")) # two\three
# 把相对路径转换为绝对路径,可以使用abspath
path = r"C:\python37\Lib\asyncio\..\.."
print(os.path.abspath(path)) # C:\python37
文件时间
import os.path
import time
'''
除了处理文件路径,os.path还包括一些用于获取文件属性的函数,类似于os.stat函数返回的结果
'''
# os.path.getatime返回文件的访问时间,a:access
print(time.strftime("%Y-%m-%d %X", time.localtime(os.path.getatime(__file__)))) # 2019-03-20 11:46:58
# os.path.getmtime返回文件的修改时间,m:modify
print(time.strftime("%Y-%m-%d %X", time.localtime(os.path.getmtime(__file__)))) # 2019-03-20 11:46:58
# os.path.getctime返回文件的创建时间,c:create
print(time.strftime("%Y-%m-%d %X", time.localtime(os.path.getctime(__file__)))) # 2019-03-19 17:17:52
# 返回的是一个时间戳,需要使用time.localtime转换为时间元祖,然后再用strftime转成字符串的格式
测试文件
import os.path
'''
程序在遇到一个路径时,需要知道这个路径到底一个文件、目录还是一个符号链接,以及这个路径到底存在与否。
os.path包含了一些用于测试这些条件的函数
'''
file = r"C:\python37\Lib\asyncio\base_events.py"
dir = r"C:\python37\Lib\asyncio"
# 是否是绝对路径
print(os.path.isabs(file)) # True
# 判断是否是一个文件
print(os.path.isfile(file)) # True
print(os.path.isfile(dir)) # False
# 判断是否是一个目录
print(os.path.isdir(file)) # False
print(os.path.isdir(dir)) # True
# 判断是否是一个链接
print(os.path.islink(file)) # False
# 判断是否是一个挂载
print(os.path.ismount(file)) # False
# 判断是否存在
print(os.path.exists(file)) # True
os.path:平台独立的文件名管理的更多相关文章
- os.path.splitext()用法--分离文件名与扩展名
用法: os.path.splitext(“文件路径”) 分离文件名与扩展名:默认返回(fname,fextension)元组,可做分片操作 例子: import os path_01='E:\ ...
- python模块之os和os.path模块
1.os模块os.listdir(dirname) 列出dirname下的目录和文件os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径.os.getenv()和os.pu ...
- 【9】python关于os模块与os.path的相关操作
---恢复内容开始--- #__author:"吉*佳" #date: 2018/10/20 0020 #function: # os模块知识点 import os # 获取平台名 ...
- Python3 操作系统与路径 模块(os / os.path / pathlib)
#!/usr/bin/env python # coding=utf-8 __author__ = 'Luzhuo' __date__ = '2017/5/7' import os def os_de ...
- Python基本知识 os.path.join与split() 函数
Python中有join和os.path.join()两个函数,具体作用如下: join:连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.joi ...
- python中spilt()函数和os.path.spilt()函数区别
Python中有split()和os.path.split()两个函数: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. os.path.split():将文件 ...
- python 中的split()函数和os.path.split()函数
Python中有split()和os.path.split()两个函数: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. os.path.split():将文件 ...
- Python3基础 os.path.splitext 处理文件名,得到文件名+扩展名
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- python 文件操作,os.path.walk()的回调函数打印文件名
#coding=utf-8 import osdef find_file(arg,dirname,files): #for i in arg: #print i for file ...
随机推荐
- [C++]数据结构:栈之顺序栈
0 栈的基本概念 栈,根据存储结构的不同,可分为:链栈和顺序栈. 1 顺序栈的知识概览 2 编程复现 2.1 定义基本数据结构 typedef char DataType; // 基本数据类型 enu ...
- Crontab的格式说明
第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...
- IDEA配置虚拟机内存
修改idea64.exe.vmoptions(64位电脑选择此文件) 一个例子,电脑内存8G,设置如下: -Xms1024m -Xmx4096m -XX:MaxPermSize=1024m -XX:R ...
- docker中如何部署mysql
这篇博文讲很详细了. 链接
- vulstudy
vulstudy是专门收集当下流行的漏洞学习平台,并将其制作成docker镜像,方便大家快速搭建环境,节省搭建时间,专注于的漏洞学习上.目前vulstudy包含以下漏洞学习平台: 序号 漏洞平台 包含 ...
- 最新 美图java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.美图等10家互联网公司的校招Offer,因为某些自身原因最终选择了美图.6.7月主要是做系统复习.项目复盘.LeetCode ...
- poj3347(扩大数据,避免小数)
题目链接:https://vjudge.net/problem/POJ-3347 题意:摆放n个正方形,问俯视视角来看时哪些正方形可见. 思路:在刷计算几何专题时刷到这题,但不需要用计算几何的知识.我 ...
- html当中如何引用js文件
3)html当中如何引用js文件 如果需要javascript工程师和html美工各干各的工作,需要分开写文件. 例 1.2 <html><head> <scrip ...
- IDEA操作之FileHeager设置
作用:头部注释添加,一般用于记录类的创建者等信息. 1. 打开配置 File->Settings->Editor->File and Code Templates->Inclu ...
- linux下nginx搭建
1.准备 1-1.安装 make,zlib,gcc-c++,openssl yum -y install make zlib zlib-devel gcc-c++ libtool openssl o ...