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 ...
随机推荐
- 使用super函数----增量重写普通方法和构造方法
使用super函数----增量重写普通方法和构造方法 在子类中如果重写了超类的方法,通常需要在子类方法中调用超类的同名方法,也就是说,重写超类的方法,实际上应该是一种增量的重写方式,子类方法会在超类的 ...
- web框架初阶
第一站 文件结构:web--- |--home.py #页面处理函数 |--index.py #主体函数 |--indexPlus.py #主体函数加强版 |--webdaem.py #通过we ...
- 限流保护——nginx限流模块
1.限制请求次数——limit_req_zone模块 a.意义:limit_req_zone 表示限制单位时间内的请求数,即速率限制,采用的漏桶算法 a.在 conf/nginx.conf 配置文件中 ...
- webdriervAPI(定位一组元素)
通过定位一组元素的方法来,来勾选自己需要勾选的选项. from selenium import webdriver from selenium.common.exceptions import NoS ...
- AWK---linux系统三剑客(三)
grep .sed.awk被称为linux中的"三剑客". grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式 ...
- 【FFMPEG】ffmpeg 中添加264支持
ffmpeg 中带有264的解码,没有编码,需要添加x264: 参考百度上的"windows_ffmpeg编译 " 文档 下载ffmpeg 代码合x264代码, ffmpeg 代码 ...
- ffmpeg学习笔记-多线程音视频解码
之前的视频解码仍然存在问题,那就是是在主线程中去完成解码的,会造成线程阻塞,这里将其改为多线程解码,使其主线程不被阻塞 前面介绍了音视频的主线程解码,那样会阻塞主线程,在前面学习了多线程以后,就可以对 ...
- JavaScript里的类和继承(转)
转自: http://www.h5cn.com/js/jishu/2016/0121/17634.html js与大部分客户端语言有几点明显的不同: JS是 动态解释性语言,没有编译过程,它在程序运行 ...
- linux日常常用命令分析
日志处理: 测试网络路由: xargs使用方法: tcpdump命令分析: dd 写入磁盘测试 cpu个数: 查看网卡流量 查看端口联通情况,临时加端口 ntpdate同步: 可以取出变动的密码: 导 ...
- Django soft-delete软删除
在django中,实现这个功能很简单,我们采用一个字段用来保存删除的时间.若记录没有被删除,那么设置该值为None,如果被删除,那么设置时间为删除的时间. class BaseSchema(model ...