Absolute path and Non Absolute path

本文详细解释了绝对路径和相对路径的概念,并通过实例演示如何正确地在网站中使用这两种路径来定位文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绝对路径:

  在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。类似于这样完整的描述文件位置的路径就是绝对路径。我们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。而在网站中类似以.net/img/photo.jpg来确定文件位置的方式也是绝对路径。>http://www.e3i5.net/img/photo.jpg来确定文件位置的方式也是绝对路径。

  在网站的应用中,通常我们使用"/"来表示根目录,/img/photo.jpg就表示photo.jpg文件在这个网站的根目录上的img目录里。但是这样使用对于初学者来说是具有风险性的,因为要知道这里所指的根目录并不是你的网站的根目录,而是你的网站所在的服务器的根目录,因此当网站的根目录与服务器根目录不同时,就会发生错误。

  相对路径:

  分析一下为什么会发生图片不能正常显示的情况。举一个例子,现在有一个页面index.htm,在这个页面中联接有一张图片photo.jpg。他们的绝对路径如下:
  c:/website/index.htm
  c:/website/img/photo.jpg

  如果你使用绝对路径c:/website/img/photo.jpg,那么在自己的计算机上将一切正常,因为确实可以在指定的位置即c:/website/img/photo.jpg上找到photo.jpg文件,但是当你将页面上传到网站的时候就很可能会出错了,因为你的网站可能在服务器的c盘,可能在d盘,也可能在aa目录下,更可能在bb目录下,总之没有理由会有c:/website/img/photo.jpg这样一个路径。那么,在index.htm文件中要使用什么样的路径来定位photo.jpg文件呢?对,应该是用相对路径,所谓相对路径,顾名思义就是自己相对与目标位置。在上例中index.htm中联接的photo.jpg可以使用img/photo.jpg来定位文件,那么不论将这些文件放到哪里,只要他们的相对关系没有变,就不会出错。

  另外我们使用“../”来表示上一级目录,“../../”表示上上级的目录,以此类推。(学习过dos的朋友可能更容易理解)

  再看几个例子,注意所有例子中都是index.htm文件中联接有一张图片photo.jpg。

  例:
  c:/website/web/index.htm
  c:/website/img/photo.jpg
  在此例中index.htm中联接的photo.jpg应该怎样表示呢?
  错误写法:img/photo.jpg
  这种写法是不正确的,在此例中,对于index.htm文件来说img/photo.jpg所代表的绝对路径是:c:/website/web/img/photo.jpg,显然不符合要求。
  正确写法:使用../img/photo.jpg的相对路径来定位文件


  例:
  c:/website/web/xz/index.htm
  c:/website/img/images/photo.jpg
  在此例中index.htm中联接的photo.jpg应该怎样表示呢?
  错误写法:../img/images/photo.jpg
  这种写法是不正确的,在此例中对于index.htm文件来说../img/images/photo.jpg所代表的绝对路径是:c:/website/web/img/images/photo.jpg。
  正确写法:可以使用../../img/images/photo.jpg的相对路径来定位文件


  例:
  c:/website/web/xz/index.htm
  c:/website/web/img/photo.jpg
  在此例中index.htm中联接的photo.jpg应该怎样表示呢?
  错误写法:../../img/photo.jpg
  这种写法是不正确的,在此例中对于index.htm文件来说../../img/photo.jpg所代表的绝对路径是:c:/website/img/photo.jpg。
  正确写法:可以使用../img/photo.jpg的相对路径来定位文件


  总结:通过以上的例子可以发现,在把绝对路径转化为相对路径的时候,两个文件绝对路径中相同的部分都可以忽略,不做考虑。只要考虑他们不同之处就可以了。
### os.path.abspath() 函数详解 `os.path.abspath()` 是 Python 的 `os.path` 模块中的一个重要函数,其主要功能是将给定的相对路径转换为绝对路径并返回。无论输入的是文件还是目录路径,此函数都会尝试计算对应的绝对路径[^1]。 #### 基本语法 ```python os.path.abspath(path) ``` - **参数**: - `path`: 字符串形式的路径(可以是相对路径或绝对路径)。如果提供的是相对路径,则会将其转换为绝对路径;如果是绝对路径,则直接返回原路径。 - **返回值**: - 返回一个字符串类型的绝对路径。 需要注意的一点是,`os.path.abspath()` 不会对路径的有效性进行验证,即使指定的路径不存在,它也会正常工作[^3]。 --- #### 使用示例 以下是几个常见的使用场景: ##### 示例 1: 将相对路径转为绝对路径 假设当前的工作目录为 `/home/user/`,执行以下代码: ```python import os relative_path = 'example.txt' absolute_path = os.path.abspath(relative_path) print(f"相对路径: {relative_path}") print(f"绝对路径: {absolute_path}") ``` 运行结果可能类似于: ``` 相对路径: example.txt 绝对路径: /home/user/example.txt ``` 这表明相对路径被成功解析为了绝对路径[^1]。 ##### 示例 2: 处理更复杂的相对路径 当涉及父级目录操作时,`os.path.abspath()` 同样适用: ```python import os complex_relative_path = '../another_folder/file.txt' absolute_path = os.path.abspath(complex_relative_path) print(absolute_path) ``` 假如当前工作目录位于 `/home/user/project/`,则输出可能是: ``` /home/user/another_folder/file.txt ``` ##### 示例 3: 验证路径存在与否不影响函数行为 即便路径不存在,`os.path.abspath()` 依然能够正常返回绝对路径: ```python import os non_existent_path = '/fake/directory/path/to/nonexistent_file.txt' absolute_non_existent_path = os.path.abspath(non_existent_path) print(absolute_non_existent_path) ``` 输出将是完整的假想路径: ``` /fake/directory/path/to/nonexistent_file.txt ``` 因此,在调用该方法前无需担心目标路径的实际状态[^3]。 --- #### 注意事项 尽管 `os.path.abspath()` 提供了便捷的功能,但在实际开发过程中仍需注意一些细节: 1. 它仅负责生成绝对路径,并不检查路径是否真实有效; 2. 如果需要进一步确认路径有效性或者区分文件与目录类型,可配合其他工具如 `os.path.exists()` 或者 `os.path.isfile()` 来完成更多逻辑处理[^4]。 --- ### 总结 通过以上分析可以看出,`os.path.abspath()` 主要用途在于帮助开发者快速定位资源的具体位置,尤其适用于跨平台项目中统一管理不同操作系统下的路径差异情况。同时由于其实现简单高效,所以在日常脚本编写以及大型应用框架设计阶段都非常常见。 ```python # 综合案例演示如何结合多个模块实现复杂需求 import os current_dir = os.getcwd() file_name = 'test.log' full_path = os.path.join(current_dir, file_name) abs_full_path = os.path.abspath(full_path) if not os.path.exists(abs_full_path): with open(abs_full_path, 'w') as f: f.write('This is an auto-generated log file.') else: print("File already exists.") print(f"The absolute path to '{file_name}' is:\n{abs_full_path}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值