目录

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:文件路径基础相关推荐

  1. PHP中文件操作基础:文件路径基础

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  2. python模块os测试文件是否存在及基础原信息获取

    python模块os测试文件是否存在及基础原信息获取 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路 ...

  3. 文件上传服务器保存形式,78.上传文件及在服务器保存文件到任意路径

    上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...

  4. php vsftpd文件上传类,php ftp文件上传函数(基础版)

    php ftp文件上传函数(基础版) 复制代码 代码如下: // 定义变量 $local_file = 'local.zip'; $server_file = 'server.zip'; // 连接F ...

  5. Geoserver怎样设置地图shp文件为相对路径,可轻松复制移植

    场景 GeoServer简介.下载.配置启动.发布shapefile全流程(图文实践): GeoServer简介.下载.配置启动.发布shapefile全流程(图文实践)_BADAO_LIUMANG_ ...

  6. java文件绝对路径_获取文件夹文件绝对路径

    引用   linuxpro https://zhidao.baidu.com/question/59940919.html?fr=iks&word=DOS+%C3%FC%C1%EE&i ...

  7. Python基础day07 作业解析【文件操作(文件读写、文件夹操作)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day07[文件读写.文件夹操作.面向对象(类.对象)] 目录 加强训练 题目1 ...

  8. html 保存文件指定路径,78.上传文件及在服务器保存文件到任意路径

    上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...

  9. java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力. 为了方便大家理解,我特意制作了本文对应的视频:总结删除文件 ...

最新文章

  1. oracle 复制 mysql_MySQL与Oracle之间互相拷贝数据的Java程序
  2. 在 Java Web 项目中,Service 层和 Dao 层真的有必要每个类都加上接口吗
  3. Android开发之动态库调用
  4. Gradle项目中gradle.build文件中的buildScript代码块
  5. TIP 2018论文概述:基于深度学习的HEVC复杂度优化
  6. 后台接收datetime_input上传date日期时间数据到后台报400怎么办?
  7. mysql text类型 使用方法_MySQL使用TEXT/BLOB类型的知识点详解
  8. Kyoto Cabinet 使用及原理
  9. java基于springboot+vue的虚拟游戏道具交易商城 element
  10. Docker系列之一:在线安装docker和下载镜像
  11. 7、边沿触发-D型触发器
  12. 美股-史考特(Scottrade)开户详细说明
  13. 【JAVASE】多线程编程基础
  14. python 获取列表中多个元素-切片操作
  15. 视频去水印怎么去?这几款视频去水印工具推荐给你
  16. Sublime Text Mac完美版
  17. Python基础及语法
  18. 微信小程序 实时音视频开发
  19. hmailserver创建MySQL失败_[hmailserver]新建用户与Email错误
  20. 【外企测试面试、笔试】分享下历时8轮、30k+的外企面试全过程

热门文章

  1. 交友盲盒源码h5开发浅谈
  2. SemEval 情感分析主流数据集以及任务介绍
  3. 生成webservice客户端以及解决SSL异常
  4. Clothoid回旋曲线在APA路径优化中的工程应用实例及其C++源码分析与下载
  5. 《你拥有的最宝贵的财富是什么》作业
  6. Cent OS 7.7 搭建蓝鲸智云社区版5.1.27(1)——安装前环境准备
  7. Future.get()抛出ExecutionException或InterruptedException?
  8. 大广角USB摄像头选用指南
  9. React + Ts项目搭建
  10. 搭建React项目,超简单教程