路径操作
Posted fjjj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了路径操作相关的知识,希望对你有一定的参考价值。
python的OS模块
- path属性os模块——from os import path
常用方法
from os import path p = path join(‘m‘,‘n‘) p1 = path.join(‘e:/a/b‘,‘c‘) print(type(p),p) print(type(p1),p1)
- os.path.exists§->True|False #判断字符串路径或文件是否存在
- os.path.split§->(路径,基名) #切割路径字符串,获取路径和基名
- os.path.dirname§->str路径 #获取路径字符串的路径
- os.path.basename§->str基名 #获取路径字符串的基名
- os.path.relpath(p )->str路径 #获取文件路径的相对路径
- os.path.abspath§->str # 获取路径字符串的绝对路径
- os.path.abspath("") 和 os.path.abspath(".") 表示当前路径的绝对路径
- os.path.splitdrive§->(磁盘名,路径) #windows系统上使用,获取路径所在磁盘的盘符
- path.splitdrive(“c:/a/b/text.py”) #(‘c:’, ‘/a/b/text.py’)
- os.path.samefile(src,dst) #判断两个路径是否指向同一个文件
- os.path.normpath(p )->os.path #正常化路径,取消双斜杠
- os.path.normcase(p )->os.path #将路径大小写规范。
- 如果是linux系统或者Mac OS系统,不做处理
- 如果是windows系统上,将路径全部转换成小写,并将"/“转成”\"
- 其他相关方法可以查看python API
- os.path.getatime(path)
- os.path.getsize(path) #获取文件大小
- os.path.isabs(path) #是否是绝对路径
- os.path.isdir(path) #判断路径是否是当前路径
pathlib模块的path对象
初始化示例
from pathlib import Path p = Path() #当前目录 Path(.) Path("")都是表示当前目录 p = Path(‘a‘,‘b‘,‘c/d‘) #当前目录下的a/b/c/d p = Path("/etc") #表示跟下的etc目录
- Path(*pathsegments)->PosixPath|WindowsPath 根据路径创建Path对象
- pathsegments 路径字符串
- PosixPath 在linux下调用会返回PosixPath对象
- WindowsPath 在windows下调用会返回WindowsPath对象
path对象拼接
str / path ==>path
path / path ==>path
path / str ==>path
str / str ==>报错
python中的全局方法
- cwd()->Path #获取当前工作路径
-
from pathlib import Path p = Path("d:/a/b") print(Path.cwd(),p.cwd())
python中的判断方法
- exists() #目录或文件是否存在
- is_dir() #是否是目录,目录存在返回True
- is_file() #是否是普通文件,文件存在返回True。
- is_fifo() #是否是FiFO文件,如果文件路径是链接文件,链接文件指向FIFO文件,并未断开,则为True,否则为False
- is_symlink() #是否是软连接
- is_block_device() #是否是块设备
- is_char_device() #是否是字符设备
- is_absolute() #是否是绝对路径
绝对路径path
- resolve() #返回一个新的路径,这个路径就是当前Path对象的绝对路径,如果是软连接则直接被解析。注意无法识别windows的快捷方式。
- absolute() #获取绝对路径,也无法识别windows的快捷方式
文件操作(Path)
chmod(mode) #根改路径指向文件的权限,类似于os.chmod()
- mode int类型,可以使用8进制描述。例如0o775
- 注意,如果指向的是符号链接文件,这会跟进符号链接文件所指向的文件
- lchmod(mode) #针对符号链接文件,只改变符号链接文件的权限,而不是跟进符号链接所指向的文件。
- touch(mode=0o666,exit_ok=True) #创建文件
- mode #模式,默认值为0o666 表示创建文件。
- exit_ok #是否忽略文件存在异常。默认值为True
- True #如果创建的文件已经存在,就只修改文件的时间戳。不抛出异常
- False #如果文件已经存在,抛出FileExistsError异常
- unlink() #删除文件或符号链接,如果Path指向一个目录会调用Path.rmdir()
- rmdir() #删除空目录,非空目录会报错。注意,Path对象没有提供判断目录为空的方法
- 简单示例,判断目录为空的方法
from pathlib import Path def isNoneDir(dirname:Path): try: stat = dirname.lstat() except Exception: return Exception else: if dirname.is_dir(): for i in dirname.iterdir(): break else: return True return False p = Path("") for i in p.iterdir(): print(i.name," 空目录" if isNoneDir(i) else "")
目录结构(path)
iterdir() #迭代当前目录,不递归。
- 简单示例 --输出当前路径下哪些是文件,哪些是目录
-
from pathlib import Path arrdir = {*Path("").iterdir()} #获取当前目录下的所有文件 mdir = {i for i in filter(lambda p: p.is_dir() ,arrdir)} #取出为目录的Path对象 text = arrdir - mdir #取出非目录Path对象 print("目录:",[*map(lambda x:x.name,mdir)]) print("文件:",[*map(lambda x:x.name,text)])
以上是关于路径操作的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程