当前位置: 首页 > news >正文

Python相对路径问题与工作目录和脚本目录

最近在编写代码并调试时,笔者发现一个python相对路径和工作目录所引起的问题,即在不同的工作环境下(使用某IDE运行或者直接运行),想同的代码文件竟然会出现不同的结果。原因在于文件中相对路径的引用,是基于工作目录而不是脚本所在物理路径,所以在笔者根据脚本所在物理路径来进行寻址的时候,得到了不同的结果。

your_path = f'../da'
# 返回当前工作目录(Current Working Directory) 
# 由程序启动时的目录决定,可通过 os.chdir() 修改代表执行脚本时所在的目录
print(f"当前工作目录: {os.getcwd()}")#返回测试地址的绝对路径,根据当前工作目录和相对路径计算得出
print(f"解析后的路径: {Path(your_path).resolve()}")# 返回脚本文件所在的绝对目录路径,不受工作目录影响,始终指向脚本物理位置
print(f"当前脚本文件所在目录:{os.path.dirname(__file__)}")

解决该问题的方法是在程序运行时将当前工作目录与当前脚本所在目录设置为一致,在脚本文件最前面添加:

import os
# 设置工作目录为脚本所在目录
os.chdir(os.path.dirname(os.path.abspath(__file__)))

接下来,简单介绍一下Python中的相对路径问题。在 Python 中,相对路径索引主要用于文件和目录的访问,它允许你以相对于当前工作目录或某个特定目录的方式来指定文件或目录的位置。

基本概念

  • 相对路径 :相对于某个起始目录的路径,起始目录通常是当前工作目录。例如,./file.txt 表示当前目录下的file.txt文件,../file.txt表示当前目录的父目录下的file.txt文件。
  • 索引 :在这里可以理解为通过相对路径来定位文件或目录的位置,以便进行读取、写入等操作。

使用场景

  • 同级目录文件访问 :如果要访问与当前脚本同级目录下的文件,可以直接使用文件名作为相对路径,如open("data.txt"),此时 Python 会从当前工作目录下查找data.txt文件。
  • 子目录文件访问 :当目标文件位于当前目录的子目录中时,相对路径需要包含子目录名。例如,要访问subdir子目录下的file.txt文件,可以使用open("subdir/file.txt")
  • 父目录文件访问 :如果要访问父目录中的文件,需要使用..来表示父目录。例如,open("../file.txt")表示访问当前目录的父目录下的file.txt文件,open("../../file.txt")表示访问当前目录的祖父目录下的file.txt文件。

注意事项

  • 当前工作目录 :相对路径的解析基于当前工作目录,而当前工作目录可能并不总是脚本所在的目录。可以通过os.getcwd()方法获取当前工作目录,通过os.chdir()方法改变当前工作目录。
  • 跨平台兼容性 :在不同的操作系统中,路径分隔符可能不同,如 Windows 使用反斜杠\\,而 Linux 和 macOS 使用正斜杠/。在 Python 中,可以使用os.path模块来处理路径,以确保跨平台兼容性。例如,os.path.join("dir", "file.txt")会根据操作系统自动使用正确的路径分隔符。
  • 路径拼接 :当使用相对路径时,可以通过os.path.join()方法来拼接路径,以避免手动处理路径分隔符带来的错误。例如,os.path.join("..", "data", "file.txt")会生成../data/file.txt这样的路径。

相对路径索引方法

  • os.path模块 :该模块提供了一组用于处理文件路径的函数。例如,os.path.relpath(path, start)可以返回从start目录到path的相对路径。如果start不指定,则默认为当前工作目录。os.path.abspath(path)可以将相对路径转换为绝对路径。
  • pathlib模块 :从 Python 3.4 开始引入,提供了一种面向对象的文件系统路径处理方式。Path类可以方便地操作文件和目录路径。例如,Path("subdir/file.txt")表示当前目录下subdir子目录中的file.txt文件,Path("../file.txt")表示父目录下的file.txt文件。

例子

  • 读取同级目录文件 :假设当前目录下有一个data.txt文件,可以使用以下代码读取它:
  • 读取子目录文件 :如果data.txt文件位于subdir子目录下,可以使用以下代码:
  • 读取父目录文件 :如果data.txt文件位于当前目录的父目录下,可以使用以下代码:

相对路径索引在文件操作中十分常用,它可以使代码更具可移植性和灵活性。通过合理使用相对路径,可以避免硬编码绝对路径带来的问题,如文件位置变化导致的代码错误等。

相关文章:

  • 5.学习笔记-SpringMVC(P53-P60)
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(五)
  • Springboot——Redis的使用
  • .NET 6 + Dapper + User-Defined Table Type
  • ElasticSearch深入解析(三):Elasticsearch 7的安装与配置、Kibana安装
  • Kafka 核心使用机制总结
  • ADW600防护等级与电气安全设计要点详解
  • MCU开发学习记录11 - ADC学习与实践(HAL库) - 单通道ADC采集、多通道ADC采集、定时器触发连续ADC采集 - STM32CubeMX
  • 从零到精通:探索GoFrame框架中gcron的定时任务之道 —— 优势、实践与踩坑经验
  • Java的JUC详细全解
  • Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
  • 深度探究获取淘宝商品数据的途径|API接口|批量自动化采集商品数据
  • 小学数学出题器:自动化作业生成
  • 智能指针(weak_ptr )之三
  • equals与hashCode的关系探究
  • 一 、环境的安装 Anaconda + Pycharm + PaddlePaddle
  • 火山云生态的体现
  • 容器内部无法访问宿主机服务的原因及解决方法
  • 深入解析:RocketMQ、RabbitMQ和Kafka的区别与使用场景
  • MySQL的日志--Redo Log【学习笔记】
  • 百位名人写“茶”字,莫言王蒙贾平凹都写了
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选
  • 上海市闵行区原二级巡视员琚汉铮接受纪律审查和监察调查
  • 世界读书日丨人均一年超10本!你达到上海平均阅读水平了吗
  • 河南省濮阳市委常委、组织部部长刘建茂接受审查和调查
  • 陕西一批干部任职公示:西安市未央、雁塔、阎良区委书记拟调整