前言 :最近学习logging日志输出部分的内容,其中涉及获取文件目录函数模块,决定把这里熟悉并梳理一下
这些路径还是获取都是来至于python自动的内置函数os.path模块,这里只是介绍了常用到的几种方式,如需更详细的请去官网学习:http://docs.python.org/library/os.path.html
先看下我的目录结构:F:\project\myDB\path.py,,如图所示
print("__file__=%s" % __file__)
__file__=F:/project/myDB/path.py
(1)获取当前程序目录的绝对路径
path=os.path.realpath(__file__)#获取脚本所在的绝对路径
path1=os.path.abspath(__file__)#获取脚本所在的绝对路径
print("path",path)
print("path1",path1)
打印结果都是一样的:F:\project\myDB\path.py
那么上面两个都是绝对路径,那有什么区别呢,我也挺好奇的,那么往下看之前的需要补充一点一会要用到的只是,那就是linux下的ln命令,就在这里单独讲解一下,不再单独写简书讲解,如果你已经很熟悉linux下的这些命令了,可以跳过
正文 :linux下的ln是一个比较重要的命令,可以为文件或者文件夹建立同步连接,就像windows的快捷方式一样
具体语法:sudo ln -s 源文件 目标文件
其中-s代表是软连接,那么什么是软连接和和硬链接呢,这里也不介绍了,可以去查看资料
删除连接:sudo rm -rf link_name
为了弄清上面两个绝对路径的区别,我们进入linux 系统
使用命令在/usr/local/下面创建一个名称为path文件夹,并在他下面创建一个test的文本文件
sudo mkdir path
sudo touch test
接着我们使用刚才介绍的ln命令在/usr/local的位置创建一个text文件的软连接
sudo ln -s /usr/local/path/test /usr/local/test1
创建完之后,查看test1的内容,你会发现和path文件夹下面的test内容一样
cat test1
那么接着进入在linux下使用命令python,进入python模式,输入以下命令,看下面的命令是不是发现区别了呢
realpath命令是显示软连接内容源头的真正目录
abspath命令是显示软连接的所在目录
(2)、获取文件当前所在目录的路径(F:\project\myDB),这里只介绍最常用的两种方式
1、os.path.split(os.path.realpath(__file__))[0] 取的是__file__所在文件path.py的所在目录
2、os.getcwd()
3、os.path.dirname(__file__) 《=》 os.path.dirname(os.path.realpath(__file__))
这三种方式输出都是:F:\project\myDB
那么os.getcwd()和os.path.dirname(os.path.realpath(__file__)有什么区别呢?
看下我的目录结构:F:\project\myDB\myPython\path.py
运行完成后,打印目录内容一样,如图所示:
接着在该脚本的上一级创建一个脚本文件path1,运行后看出不一样的地方了吧如图所示:
os.path.dirname(os.path.realname(__file__))获取的__file__所在路径
os.getcwd()是获取的当前脚本所在路径
(3)、获取当前文件所在目录的上一级文件路径(F:\project)
os.path.dirname(os.path.dirname(__file__))#获取文件所在目录的上一级目录
os.path.abspath(os.path.dirname(os.getcwd()))#获取文件所在目录的上一级目录