python相对路径和绝对路径总结

本文详细介绍Python中os模块和os.path模块的功能,包括获取、修改当前工作目录,理解相对路径和绝对路径,以及路径相关函数的使用,如abspath、isabs、relpath等,适合Python初学者和进阶者阅读。

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

1 当前工作目录

某本书中提到:“Every program that runs on your computer has a current working directory, or cwd. Any filenames or paths that do not begin with the root folder are assumed to be under the current working directory .”

翻译为:每一个运行在计算机中的程序都有一个当前工作目录(或cwd),任何不以根文件夹开始的文件名或路径,都被假定在当前工作目录之下。

1.1 os.getcwd() 函数可用于获取当前工作目录

>>> import os
>>> os.getcwd()
'E:\\Coding\\pycharm\\cifar10'

1.2 os.chdir() 函数可用于修改当前工作目录

>>> os.chdir("C:\\Windows")
>>> os.getcwd()
'C:\\Windows'

1.3 os.listdir(path) 方法

用于返回指定的文件夹包含的文件或文件夹的名字的列表;
只支持在 Unix, Windows 下使用。

2 相对路径和绝对路径

绝对路径:总是从根文件夹开始,Window 系统中以盘符(C:、D:)作为根文件夹,而 OS X 或者 Linux 系统中以 / 作为根文件夹。
相对路径:指的是文件相对于 当前工作目录所在的位置。

      在使用相对路径表示某文件所在的位置时,经常使用.\表示当前所在目录,还有..\表示当前所在目录的父目录。以下图为例,如果当前工作目录设置为 C:\bacon,则图中其他文件夹和文件的相对路径和绝对路径对应为该图右侧所示的样子。(该图片源地址)
在这里插入图片描述

3 python的os.path模块提供的路径相关函数

3.1 os.getcwd() 函数:获取当前工作目录

>>> import os
>>> os.getcwd()
'E:\\Coding\\pycharm\\cifar10'

3.2 os.path.abspath(path) :返回 path 参数的绝对路径的字符串

os.path.abspath(".") ,获取当前文件所在路径;
os.path.abspath("..") ,获取当前文件所在路径的上一层路径;

# 可用于将相对路径转换为绝对路径 (当path = '.'时,表示当前工作目录)
>>> os.getcwd()
'E:\\Coding\\pycharm\\cifar10'
>>> os.path.abspath(".")
'E:\\Coding\\pycharm\\cifar10'
>>> os.path.abspath("..")
'E:\\Coding\\pycharm'

3.3 os.path.isabs(path):判断 path 是否为绝对路径

>>> os.path.isabs(".")
False

3.4 os.path.relpath(path, start) :返回从 start 路径到 path 的相对路径的字符串

# 如果没有提供 start,则使用当前工作目录作为开始路径。
>>> os.path.relpath("E:\\Coding")
'..\\..'

@ 注意:Windows环境中,该函数的path及start必须在同一个盘目录下,当一个为E盘,一个为F盘时会报错:
>>> os.path.relpath("E:\\Coding", "F:\\anoconda")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "F:\Anaconda\envs\pytorch\lib\ntpath.py", line 562, in relpath
    path_drive, start_drive))
ValueError: path is on mount 'E:', start on mount 'F:'

3.5 os.path.dirname(path) / os.path.basename(path) / os.path.split() :获取路径

os.path.dirname(path):返回包含 path 参数中最后一个斜杠之前的所有内容的字符串
os.path.basename(path) :返回包含 path 参数中最后一个斜杠之后的所有内容的字符串
os.path.split(path) :返回path路径的目录名称和基本名称这两个字符串组成的元组
path.dirname(__file__)可返回当前文件所在目录(__file__为文件名)

>>> path = "C:\\Windows\\system32\\xcopy.exe"
>>> os.path.dirname(path)
'C:\\Windows\\system32'
>>> os.path.basename(path)
'xcopy.exe'
>>> os.path.split(path)  # 相当于前两个函数的组合使用
('C:\\Windows\\system32', 'xcopy.exe')

4 路径拼接 os.path.join()用法

os.path.join() 函数中可以传入多个路径:

  1. 如果各组件名首字母不包含 ‘/’,则函数会自动加上;
  2. 会从第一个以“/”开头的参数开始拼接,之前的参数全部丢弃;
  3. 优先判定上一种情况。若无,则如果出现“./”开头的参数,会从“./”开头的参数的上一个参数开始拼接;
>>> print('1:', os.path.join("aaa", "bbb", "ccc.txt"))
1: aaa\bbb\ccc.txt
>>> print('2:', os.path.join("aaa", "/bbb", "ccc.txt"))
2: /bbb\ccc.txt
>>> print('3:', os.path.join("aaa", "./bbb", "ccc.txt"))
3: aaa\./bbb\ccc.txt

参考1:Python绝对路径和相对路径详解
参考2:python 相对路径和绝对路径的区别

欢迎关注【OAOA

<think>好的,用户之前问了如何读取文件,现在又询问Python相对路径绝对路径的使用方法。这说明用户可能在实际操作中遇到了路径相关的问题,比如文件找不到或者路径错误的情况。需要详细解释两者的区别使用场景,确保用户能够正确应用。 首先,相对路径绝对路径的基本概念需要明确。相对路径是相对于当前工作目录的路径,而绝对路径是从根目录开始的完整路径。用户可能不清楚当前工作目录是什么,尤其是在使用IDE或脚本时,工作目录可能与脚本所在目录不同,这点需要特别说明。 接下来,要提供具体的例子,展示如何在不同情况下使用这两种路径。比如,当文件在脚本的同级目录、子目录或上级目录时,如何编写相对路径。同时,也要演示如何获取设置当前工作目录,帮助用户诊断路径问题。 用户可能遇到的问题包括路径拼写错误、目录层级错误、工作目录不一致等。需要提醒常见的注意事项,比如斜杠的方向,特殊字符的处理,以及路径拼接的最佳实践。此外,跨平台兼容性也是一个重点,建议使用pathlib模块来避免系统间的路径格式差异。 最后,确保用户了解如何动态获取脚本所在目录,从而构建可靠的相对路径,避免硬编码绝对路径带来的维护问题。总结时强调根据项目结构选择合适的方法,优先使用相对路径以增强可移植性。</think>以下是Python中使用相对路径绝对路径的详细说明: --- ### **一、基本概念** - **绝对路径**:从系统根目录开始的完整路径(Windows以盘符开头,Linux/macOS以`/`开头) - 示例:`C:/Users/name/documents/file.txt`(Windows)或`/home/user/project/data.csv`(Linux/macOS) - **相对路径**:相对于当前工作目录(Current Working Directory, CWD)的路径 - 示例:`./data/file.txt`(当前目录下的data文件夹中的文件) --- ### **二、具体使用方式** #### **1. 相对路径** ```python # 文件结构示例: # project/ # ├── main.py # └── data/ # └── input.txt # 访问同级目录下的文件 with open("input.txt", "r") as f: # 直接写文件名 pass # 访问子目录 with open("data/input.txt", "r") as f: # 斜杠方向推荐使用正斜杠/ pass # 访问上级目录 with open("../config.json", "r") as f: # ../表示上一级目录 pass ``` #### **2. 绝对路径** ```python # Windows示例 with open(r"C:\Users\user\project\data\input.txt", "r") as f: # 使用原始字符串(r前缀)避免转义 pass # Linux/macOS示例 with open("/home/user/project/data/input.txt", "r") as f: pass ``` --- ### **三、关键技巧** 1. **获取当前路径** ```python import os print(os.getcwd()) # 查看当前工作目录 print(__file__) # 获取当前脚本的绝对路径 ``` 2. **路径拼接推荐方式** ```python from pathlib import Path base_path = Path(__file__).parent # 获取脚本所在目录 file_path = base_path / "data" / "input.txt" # 自动处理路径分隔符 ``` 3. **路径转换** ```python import os abs_path = os.path.abspath("relative/path.txt") # 相对路径绝对路径 rel_path = os.path.relpath("/full/path/file.txt") # 绝对路径相对路径 ``` --- ### **四、常见问题排查** | 问题现象 | 解决方法 | |--------------------------|-----------------------------------| | `FileNotFoundError` | 检查路径是否拼写错误,确认文件真实存在 | | 路径层级错误 | 使用`os.path.exists()`验证路径有效性 | | IDE工作目录不符 | 在IDE中设置工作目录为项目根目录 | | 跨平台兼容问题 | 使用`os.path.join()`或`pathlib`模块 | --- ### **五、最佳实践建议** 1. **优先使用相对路径**:提高代码可移植性 2. **动态获取根目录**: ```python import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ``` 3. **处理特殊字符**:路径包含空格时建议用`Path`对象 4. **跨平台兼容**:避免硬编码路径分隔符(`/`或`\`) --- 如果需要进一步了解具体场景的路径使用方法,可以提供您的项目结构示例,我会给出针对性建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值