【python】路径管理+路径拼接问题

路径管理

问题

环境:python3.7.16 win10

相对路径问题

因为python的执行特殊性,使用相对路径时,在不同路径下用python指令会有不同的索引效果(python的项目根目录根据执行python语句时,像是其他项目因为有包管理工具vue-cli或webpack,会固定项目根目录),所以最好规定执行项目路径。

绝对路径问题

使用绝对路径时,项目移动时,索引基本会发生错误(因为项目的路径变化了)。

解决

因此,最好使用绝对路径+相对路径组合的形式。只要我规定文件内路径按照项目路径来写相对路径,并通过绝对路径计算出当前项目路径,将两者加以组合,那么无论项目如何移动路径索引都没问题了。

os库

python 复制代码
import os

# 绝对路径  
absolute_path = os.path.abspath(__file__)
# 相对路径  
relative_path = "..\data\历史时间序列表.csv"  
# 连接路径  
combined_path = os.path.join(absolute_path, relative_path)  
  
print(absolute_path, relative_path)
print(combined_path)

很明显出现拼接错误,os.path.join函数只能将's:\path'与'data.csv'组合,即在两个字符串中间简单加个'\',并不能正确解析双点'..'的意义,因此这个方法不行。

pathlib库

python 复制代码
from pathlib import Path  
  
# 相对路径  
relative_path = Path("..\data\历史时间序列表.csv")  
  
# 获取绝对路径  
absolute_path = relative_path.resolve()  
  
print(relative_path)
print(absolute_path)


一样会根据python语句的执行目录发生变化,因此这个方法也不行。

最终解决

os库藏了一个很鸡贼的方法os.path.normpath(path),并且无论你是问chat-gpt还是自己搜索相关问题,都不会给出这个函数。

python 复制代码
import os

# 绝对路径  
absolute_path = os.path.abspath(__file__)
# 相对路径  
relative_path = "..\data\历史时间序列表.csv"  
# 先将当前文件的绝对路径的目录和相对路径拼接,然后使用normpath进行路径规范化  
combined_path = os.path.normpath(os.path.join(os.path.dirname(absolute_path), relative_path)) 
  
print(absolute_path, relative_path)
print(combined_path)
相关推荐
B站计算机毕业设计超人几秒前
计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
大数据·python·机器学习·spark·课程设计·数据可视化·推荐算法
计算机徐师兄13 分钟前
Python基于Django的web漏洞挖掘扫描技术的实现与研究(附源码,文档说明)
python·django·漏洞扫描·web漏洞挖掘扫描·python django·python漏洞挖掘扫描技术
m0_7482466113 分钟前
【论文投稿】Python 网络爬虫:探秘网页数据抓取的奇妙世界
开发语言·爬虫·python
minstbe17 分钟前
AI开发 - 算法基础 递归 的概念和入门(二)汉诺塔问题 递归的应用和使用注意 - Python
开发语言·python·算法
web1478621072332 分钟前
Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
python·信息可视化·课程设计
岁月如歌,青春不败41 分钟前
HMSC联合物种分布模型
开发语言·人工智能·python·深度学习·r语言
susu108301891144 分钟前
python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作
python·selenium
Pocker_Spades_A1 小时前
阿里云-通义灵码:在 PyCharm 中的强大助力(下)
ide·python·阿里云·pycharm
chengxuyuan1213_1 小时前
Python有哪些常用的库
开发语言·python
小白—人工智能1 小时前
有一个4*5的矩阵如下,要求编写程序计算总和与平均值,并找出其中值最大的那个元素输出,以及其所在的行号和列号。
数据结构·python·算法·矩阵