重新认识path之中的路径
背景
在一个项目中,需要获取上一层文件地址。结构如下:
即想在dtl2.py中读取到datas文件夹下面的csv数据。
之前的代码如下:
cwd = os.getcwd()
dirname = os.path.dirname(cwd)
## 构建数据路径
data_abs_path = 'datas\双十一淘宝美妆数据.csv'
data_path = os.path.join(dirname, data_abs_path)
print(data_path)
后面感觉不是特别合理,应该用绝对路径的。且感觉对python中的路径不是特别熟悉。
关于OS模块
OS:operating system
该模块与操作系统有关,比如
- 权限管理
os.access(path, mode)
os.chmod(path, mode) - 文件打开,关闭
os.open(file, flags[, mode])
os.close(fd)
详情见
Python3 OS 文件/目录方法和os — 多种操作系统接口
在我之前写的代码中,用到
cwd = os.getcwd()
为了获取到当前工作目录,打印值为:etl文件夹目录。
关于os.path
专门操作文件路径的模块,所以该模块函数的传参基本都是有path,代表文件所在路径。
比如os.path.abspath(path),os.path.exists(path)等,详细函数见:
Python3 os.path() 模块
总结
若是想要读取上一层工作目录的文件,在不改变工作路径提前下,必须先用os.getcwd()函数获取到当前工作路径。然后可以有两种方法处理:
- 法1:
cwd = os.getcwd() # 获取当前工作路径
dirname = os.path.dirname(cwd) # 获取当前工作路径的上一层
## 构建数据路径
data_abs_path = 'datas\双十一淘宝美妆数据.csv'
data_path = os.path.join(dirname, data_abs_path)
print(data_path)
这种方法利用了os.path.dirname()函数,对面只跳一层比较简单,但是如果要跳几层,比如想要获取上述两层文件夹中的文件,这种写法就非常不好,代码比较冗杂。
- 法2:
data_path = os.path.join(os.getcwd(), "..\datas\双十一淘宝美妆数据.csv")
这种方法利用了…\的写法。直接基于当前路径下,往上层移动,这种方法相比于法1更加好,表现了可读性和效率上。