鱼C论坛

 找回密码
 立即注册
查看: 308|回复: 2

[已解决]相对路径与绝对路径

[复制链接]
发表于 2024-6-6 06:30:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个用法我没有太明白,首先代码是什么意思?是本来在D盘的文件通过转换以后可以自动到E盘去吗?这种用法具体用在哪里呢?按照概念来说的话,所有文件都应该是绝对路径,那我为啥要转换成相对路径呢?
最佳答案
2024-6-6 11:05:45
首先分析代码
1.Path('.') 等用来创建一个 WindowsPath 对象来表示路径。说白了,就类似于用字符串表示路径,只不过 WindowsPath 对象有一些高级、方便的方法。
>>> Path(r'C:\1.txt')
WindowsPath('C:/1.txt')
>>>##f = open(r'C:\1.txt') 与 f = open(Path(r'C:\1.txt')) 效果相同
2.path('.').resolve()是将相对路径转化为绝对路径

相对路径的应用场景
设想你写了一个程序,程序需要打开与自己在相同文件夹下的 1.txt 文件。你把这个程序和文件同时存在 D 盘的根目录里。
若用绝对路径打开文件,代码可能长这样:
f = open(r'D:\1.txt')
有一天,你把这个程序移动到了 E 盘,因为文件与程序在相同文件夹下,所以文件也要移动到 E 盘。
这时候,你就要把代码手动改成
f = open(r'E:\1.txt')
不仅不方便,而且灵活性很差。
事实上,大多数情况下,你不知道文件究竟在哪,只知道它在相对于程序在哪儿
这时候,我们便用 '.' 表示程序当前所在的目录,'..' 表示上一级目录,而 f = open(r'.\1.txt') 会打开当前所在的目录下的 1.txt 文件
这时候的 '.',就交给系统自己确定了

利用 resolve() 转换以后,用 '.' 表示的部分就会改成当前所在的目录
也就是说,随着当前所在的目录不同, resolve() 所得结果就不同
1717626353590.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-6-6 06:32:04 | 显示全部楼层
或者说利用resolve()转换以后是什么效果?就是换了一个文件夹吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-6 11:05:45 | 显示全部楼层    本楼为最佳答案   
首先分析代码
1.Path('.') 等用来创建一个 WindowsPath 对象来表示路径。说白了,就类似于用字符串表示路径,只不过 WindowsPath 对象有一些高级、方便的方法。
>>> Path(r'C:\1.txt')
WindowsPath('C:/1.txt')
>>>##f = open(r'C:\1.txt') 与 f = open(Path(r'C:\1.txt')) 效果相同
2.path('.').resolve()是将相对路径转化为绝对路径

相对路径的应用场景
设想你写了一个程序,程序需要打开与自己在相同文件夹下的 1.txt 文件。你把这个程序和文件同时存在 D 盘的根目录里。
若用绝对路径打开文件,代码可能长这样:
f = open(r'D:\1.txt')
有一天,你把这个程序移动到了 E 盘,因为文件与程序在相同文件夹下,所以文件也要移动到 E 盘。
这时候,你就要把代码手动改成
f = open(r'E:\1.txt')
不仅不方便,而且灵活性很差。
事实上,大多数情况下,你不知道文件究竟在哪,只知道它在相对于程序在哪儿
这时候,我们便用 '.' 表示程序当前所在的目录,'..' 表示上一级目录,而 f = open(r'.\1.txt') 会打开当前所在的目录下的 1.txt 文件
这时候的 '.',就交给系统自己确定了

利用 resolve() 转换以后,用 '.' 表示的部分就会改成当前所在的目录
也就是说,随着当前所在的目录不同, resolve() 所得结果就不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表