文件7:文件路径基础
目录
1. 绝对与相对路径
1.1 绝对路径
1.2 相对路径
1.3 两者区别
2. pathlib模块
2.1 模块概述
2.2. pathlib 与 os 模块的映射关系
3. 路径对象
3.1 路径实例化
3.2 路径可哈希
3.3 路径拼接:'\' 运算符
3.4 路径获取
classmethod Path.cwd()
classmethod Path.home()
1. 绝对与相对路径
1.1 绝对路径
绝对路径:绝对路径是指文件在硬盘上真正存在的路径。
在 Windows 系统中,绝对路径是以磁盘名称开头,如 C: 或者 D: ,具体的文件或文件夹名称做结尾。绝对路径是唯一的,只有一个。
绝对路径是唯一的,只有一个。
注意转义字符对路径的干扰,需要使用 r'' 原始字符串,或者 '\\' 代替 '\' 。
示例:
'1.txt' 存放 'C:\Users\15063\Desktop' 路径目录下
'1.txt' 的绝对路径即: 'C:\Users\15063\Desktop\1.txt'
1.2 相对路径
相对路径:相对于自己的目标文件位置。
相对路径是针对当前文件夹这一参考对象,来描述文件路径的形式,使用..\\ 或.\\表示。
'.' 表示文件或文件夹所在的当前目录,可以使用 '.\' 打开本级目录下的文件或目录,也可以直接省略;两个点 '..\' 表示当前目录的上一级目录,上n级就用n个 '.' 表示。
示例:
文件路径如下图
文件FB1访问FB2相对路径:'文件FB2' 或者 '.\文件FB2'
文件FB2访问FB11相对路径:'文件夹B1\文件FB11' 或者 '.\文件夹B1\文件FB11'
文件FA1访问FB11相对路径:'..\文件夹B\文件夹B1\文件FB11'
文件FB11访问文件FA1相对路径:'...\文件夹A\文件FA1'
1.3 两者区别
绝对路径和相对路径的区别,可以如下描述:
- 绝对路径是一个文件实际存在于硬盘中的路径。
- 相对路径,指的是与自身的目标档案相关的位置。
- 绝对路径是指可以从这个路径上查找文件夹,不管是从外部或内部存取。而相对路径则是与它本身相关的,其它地方的档案和路径,则只能在内部存取。
2. pathlib模块
2.1 模块概述
pathlib 为 Python3.4 后新增模块,提供表示文件系统路径的类,完美代替 os.path 模块;
路径类可分为提供纯计算操作而不涉及 I/O 的 PurePath,以及从 PurePath 继承而来但提供 I/O 操作的子类 Path;
Path 除了拥有 PurePath 提供的路径操作之外,还提供对路径对象进行系统调用的方法,通常编码直接调用Path函数即可,从 pathlib 中单独导入Path函数类,如下:
>>> from pathlib import Path
导入pathlib模块中的Path类,其中有一系列常用方法和属性,可实现获取当前路径、检测路径是否存在、拆分路径为元组、创建文件夹、修改文件夹或文件名、删除文件夹或文件、查找等操作;
后续文件路径方法,都基于 Path 类展开。
PurePath 则在如下情况中较为常用,比如:
- 如果要在 Unix 设备上操作 Windows 路径(反之亦然),不可以在 Unix 上实例化一个 WindowsPath,但可以实例化一个 PureWindowsPath。
- 如果只想操作路径,而不想实际访问操作系统,实例化一个 PurePath 可以防止执行任何访问操作系统的操作。
2.2. pathlib 与 os 模块的映射关系
以下是 os 模块与 PurePath / Path 模块对应功能的函数映射表:
注意:并非所有的函数、方法完全等价,它们有些虽然具有相互重叠的使用场景,但语义并不相同。这包括了 os.path.abspath() 和 Path.resolve(),以及 os.path.relpath() 和 PurePath.relative_to() 等。
os 和 os.path |
pathlib |
os.path.abspath() |
Path.resolve(),见注1 |
os.chmod() |
Path.chmod() |
os.mkdir() |
Path.mkdir() |
os.makedirs() |
Path.mkdir() |
os.rename() |
Path.rename() |
os.replace() |
Path.replace() |
os.rmdir() |
Path.rmdir() |
os.remove(),os.unlink() |
Path.unlink() |
os.getcwd() |
Path.cwd() |
os.path.exists() |
Path.exists() |
os.path.expanduser() |
Path.expanduser() 和 Path.home() |
os.listdir() |
Path.iterdir() |
os.path.isdir() |
Path.is_dir() |
os.path.isfile() |
Path.is_file() |
os.path.islink() |
Path.is_symlink() |
os.link() |
Path.hardlink_to() |
os.symlink() |
Path.symlink_to() |
os.readlink() |
Path.readlink() |
os.path.relpath() |
Path.relative_to(),见注2 |
os.stat() |
Path.stat(),Path.owner(),Path.group() |
os.path.isabs() |
PurePath.is_absolute() |
os.path.join() |
PurePath.joinpath() |
os.path.basename() |
PurePath.name |
os.path.dirname() |
PurePath.parent |
os.path.samefile() |
Path.samefile() |
os.path.splitext() |
PurePath.suffix |
注1:os.path.abspath() 不会解析符号链接而 Path.resolve() 则会解析。
注2:Path.relative_to() 要求 self 为参数的子路径,但 os.path.relpath() 则没有这个要求。
3. 路径对象
3.1 路径实例化
有三种方法可以实例化具体路径:
#PurePath 子类,以当前操作系统的路径风格表示路径(实例化为 PosixPath 或 WindowsPath)
class pathlib.Path(*pathsegments) #Path 和 PurePosixPath 的子类,表示一个非 Windows 文件系统的具体路径
class pathlib.PosixPath(*pathsegments) #Path 和 PureWindowsPath 的子类,表示一个 Windows 文件系统的具体路径
class pathlib.WindowsPath(*pathsegments)
每一个 pathsegments 参数,可以是一个代表路径片段的字符串,或者是一个实现了 os.PathLike 接口的对象返回的字符串,或者是另外一个路径对象;
- 当参数为空的时候,则假定为当前目录:
- 当参数中包含多个路径字符串,相对路径与前方最近一个绝对路径合并,并采用最后一个合并后的绝对路径;
- 当参数中只有相对路径,则相对路径按顺序合并;
- 在 Windows 路径中,如输入多个路径中,最后一个绝对路径没有盘符,则以最近一个有盘符的绝对路径为输出路径的盘符;
上述绝对路径指以盘符或 '\' 为开头的路径字符串,如:'E:\David\Code.py' 、'\David\Code.py';
上述相对路径指以 '.' 或文件夹名、文件名为开头的路径字符串,如:'.' 、 '..\Code.py' 、 'Code\' 、 'Code.py'等等。
生成的路径中,'\'、'\\' 会被替换为单斜杠 '/' ,表示当前文件夹的点号斜杠 '.\' 会被去除,双点号斜杠 '..\' 则不会,以防改变路径的含义。
from pathlib import Path#绝对路径字符串转换
p = Path('E:\David\Code\python\代码')
p
WindowsPath('E:/David/Code/python/代码')
#相对路径字符串转换
p = Path('textx.txt')
p
WindowsPath('textx.txt')#参数为空,生成默认当前文件夹的相对路径 '.'
p3 = Path()
p3
WindowsPath('.')#当参数中包含多个绝对、相对路径,相对路径与前方最近一个绝对路径合并,并采用最后一个合并后的绝对路径
p = Path('D:\\','文件\\text.txt','F:\\A','E:\\David\\Code\\python\\代码','text.txt')
p
WindowsPath('E:/David/Code/python/代码/text.txt')
p = Path('E:\\David\\Code','python\\代码','F:\\A','text.txt','D:\\','文件\\','text.txt')
p
WindowsPath('D:/文件/text.txt')
p = Path('\\a\\b\\c.txt','\\d\\e','f.txt')
p
WindowsPath('/d/e/f.txt')#当参数中只有相对路径,则相对路径按顺序合并
p = Path('a.txt','b.txt')
p
WindowsPath('a.txt/b.txt')#在 Windows 路径中,如输入多个路径中,最后一个绝对路径没有盘符,则以最近一个有盘符的绝对路径为输出路径的盘符
p = Path('D:\\a\\b\\','C:\\x.txt','F:\\d\\','y.py','\\e\\f\\z.doc')
p
WindowsPath('F:/e/f/z.doc')#生成的路径中,'\'、'\\' 会被替换为单斜杠 '/'
p = Path('C:\\a/b\c.txt')
p
WindowsPath('C:/a/b/c.txt')#表示当前文件夹的点号斜杠 '.\' 会被去除
p = Path(r'.\a.txt')
p
WindowsPath('a.txt')
#双点号斜杠 '..\' 则不会,以防改变路径的含义
p = Path(r'..\a.txt')
p
WindowsPath('../a.txt')
3.2 路径可哈希
生成的路径是不可变的,且可哈希的。可对路径做排序和比较(根据对应操作系统风格来决定是否区分大小写);可将路径作为字典的键和集合的元素。
d = {Path('..\\a.txt'):1234,Path('C:\\文件夹\\'):'5678'}
d
{WindowsPath('../a.txt'): 1234, WindowsPath('C:/文件夹'): '5678'}
Path('..\\a.txt') in d
True
Path('..\\a.txt') == Path(r'..\a.txt')
True
3.3 路径拼接:'\' 运算符
斜杠(/)运算符用于创建子路径,就像 os.path.join() 一样;
拼接项目中必须有一项为路径对象,其他项可以为字符串;
拼接规则可参考2.1中 Path() 拼接规则如下;
- 当拼接项目中包含多个路径字符串,相对路径与前方最近一个绝对路径合并,并采用最后一个合并后的绝对路径;
- 当拼接项目中只有相对路径,则相对路径按顺序合并;
- 在 Windows 路径中,如输入多个路径中,最后一个绝对路径没有盘符,则以最近一个有盘符的绝对路径为输出路径的盘符;
如只有字符串,或有整型、列表等其他类型值参与运算,则报错。
#路径对象与字符串拼接
p = Path('C:/') / '文件夹\\' / 'test.txt'
p
WindowsPath('C:/文件夹/test.txt')#拼接规则测试
p = Path('.\\x.txt') / '\\文件夹\\' / Path('C:/')
p
WindowsPath('C:/')
p = Path('.\\x.txt') / '文件夹\\'
p
WindowsPath('x.txt/文件夹')
p = Path('.\\x.txt') / Path('C:/') / '\\文件夹\\'
p
WindowsPath('C:/文件夹')#只有字符串做拼接,报错
p = '文件夹\\' / 'test.txt'
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'str'#路径与列表、整型数据拼接,报错
p = Path('C:/') / ['a','b','c']
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'WindowsPath' and 'list'
p = Path('C:/') / 1234
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'WindowsPath' and 'int'
3.4 路径获取
classmethod Path.cwd()
返回一个新的表示当前目录的路径对象(和 os.getcwd() 相同)。
Path.cwd()
WindowsPath('E:/David/Code/python/代码')
classmethod Path.home()
返回一个表示用户主目录的新路径对象(与带 ~ 构造的 os.path.expanduser() 所返回的结果相同)。如果无法解析用户主目录,则抛出 RuntimeError 异常。
Path.home()
WindowsPath('C:/Users/david')
文件7:文件路径基础相关推荐
- PHP中文件操作基础:文件路径基础
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- python模块os测试文件是否存在及基础原信息获取
python模块os测试文件是否存在及基础原信息获取 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路 ...
- 文件上传服务器保存形式,78.上传文件及在服务器保存文件到任意路径
上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...
- php vsftpd文件上传类,php ftp文件上传函数(基础版)
php ftp文件上传函数(基础版) 复制代码 代码如下: // 定义变量 $local_file = 'local.zip'; $server_file = 'server.zip'; // 连接F ...
- Geoserver怎样设置地图shp文件为相对路径,可轻松复制移植
场景 GeoServer简介.下载.配置启动.发布shapefile全流程(图文实践): GeoServer简介.下载.配置启动.发布shapefile全流程(图文实践)_BADAO_LIUMANG_ ...
- java文件绝对路径_获取文件夹文件绝对路径
引用 linuxpro https://zhidao.baidu.com/question/59940919.html?fr=iks&word=DOS+%C3%FC%C1%EE&i ...
- Python基础day07 作业解析【文件操作(文件读写、文件夹操作)】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day07[文件读写.文件夹操作.面向对象(类.对象)] 目录 加强训练 题目1 ...
- html 保存文件指定路径,78.上传文件及在服务器保存文件到任意路径
上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...
- java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇
本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力. 为了方便大家理解,我特意制作了本文对应的视频:总结删除文件 ...
最新文章
- oracle 复制 mysql_MySQL与Oracle之间互相拷贝数据的Java程序
- 在 Java Web 项目中,Service 层和 Dao 层真的有必要每个类都加上接口吗
- Android开发之动态库调用
- Gradle项目中gradle.build文件中的buildScript代码块
- TIP 2018论文概述:基于深度学习的HEVC复杂度优化
- 后台接收datetime_input上传date日期时间数据到后台报400怎么办?
- mysql text类型 使用方法_MySQL使用TEXT/BLOB类型的知识点详解
- Kyoto Cabinet 使用及原理
- java基于springboot+vue的虚拟游戏道具交易商城 element
- Docker系列之一:在线安装docker和下载镜像
- 7、边沿触发-D型触发器
- 美股-史考特(Scottrade)开户详细说明
- 【JAVASE】多线程编程基础
- python 获取列表中多个元素-切片操作
- 视频去水印怎么去?这几款视频去水印工具推荐给你
- Sublime Text Mac完美版
- Python基础及语法
- 微信小程序 实时音视频开发
- hmailserver创建MySQL失败_[hmailserver]新建用户与Email错误
- 【外企测试面试、笔试】分享下历时8轮、30k+的外企面试全过程
热门文章
- 交友盲盒源码h5开发浅谈
- SemEval 情感分析主流数据集以及任务介绍
- 生成webservice客户端以及解决SSL异常
- Clothoid回旋曲线在APA路径优化中的工程应用实例及其C++源码分析与下载
- 《你拥有的最宝贵的财富是什么》作业
- Cent OS 7.7 搭建蓝鲸智云社区版5.1.27(1)——安装前环境准备
- Future.get()抛出ExecutionException或InterruptedException?
- 大广角USB摄像头选用指南
- React + Ts项目搭建
- 搭建React项目,超简单教程