python获取路径的相关函数总结
os.getcwd() |
获取输入执行命令时所在的目录(绝对路径) |
os.path[0] |
获取执行的主文件所在的目录(绝对路径) |
sys.argv[0] |
获取输入的执行命令中的路径部分 |
__file__ |
当前文件的路径(可能是相对路径,也可能是绝对路径) |
os.path.abspath(path) |
对相对路径返回路径的绝对路径 |
os.path.realpath(path) |
对相对路径返回路径的绝对路径 |
os.path.dirname(path) |
返回路径中的目录部分 |
os.path.basename(path) |
返回路径中的文件部分 |
os.path.split(path) |
返回元组: (dirname , basename) |
通过一个例子来查看上述函数返回的具体值:
文件路径结构:
/home/xx/www/xx/
- call.py [调用文件]
- xx/ [dir]
- echo_basedir.py [用于输出路径的测试文件]
在测试文件echo_basedir.py中分别打出os.getcwd() , __file__ , os.path.abspath(__file__) ,os.path.realpath(__file__) , sys.argv[0] , sys.path[0]的值。
在调用文件call.py中会调用echo_basedir.py 。
使用两种方式测试:
一种是直接输入命令调用echo_basedir.py 打印结果;
一种是通过输入命令运行call.py来将echo_basedir.py作为一个模块调用。
在路径/home/xx/www/xx/下输入命令。
1. 测试第一种情况:
输入命令:python xx/echo_basedir.py
其中os.getcwd()结果为/home/xx/www/xx ,为当前输入命令的路径
__file__返回的是echo_basedir.py的相对当前路径的相对路径;在分别使用os.path.realpath() 和os.path.abspath()后返回绝对路径。
sys.argv[0]返回的是命令中的路径部分,即xx/echo_basedir.py。可以看到将sys.argv[0]和之前的os.getcwd()拼凑起来就是绝对路径啦。
sys.path[0]返回了文件的所在目录的绝对路径。
2. 测试第二种情况:
输入命令: python call.py
返回的结果中,os.getcwd()没有变化,依然是当前输入命令所在的目录;
__file__的结果发生了变化,首先返回的是一个绝对路径,其次从文件名中看到时.pyc文件,预编译文件;
sys.argv[0]仍然是命令中的路径部分;
sys.path[0]是call.py主文件所在的路径了,而不是子模块的路径。尽管是在子模块中使用的该参数。
由上,可知如果想要获取当前文件所在的路径,最稳定的即是在__file__的基础上使用os.path.abspath或os.path.realpath修饰来获取文件所在的路径。当然,如果只需要路径中的目录部分,可以使用os.path.dirname()取目录,当然可以使用os.path.basename()获取文件名,也可以使用os.path.split()来同时获得这两个值组成的元组。
附上os.path下其他的函数:
文件检测 |
|
os.path.exists() |
|
os.path.isdir() |
|
os.path.isfile() |
|
路径规则化 |
|
os.path.normcase() |
在windows下有效果; 包括大写->小写、分隔符的规范 |
os.path.normpath() |
文件路径的规范,如: /home/path/../target -> /home/target 对于拼接的路径有一定的规范作用 |
路径分割 |
|
os.path.splitdrive() |
在windows下有效
linux下返回的元组第一个为空字符 |
os.path.splitext() |
分割扩展名 |
文件信息 |
|
os.path.getsize() |
字节为单位 |
os.path.getmtime() / os.path.getatime() |
获取据文件最后修改的时间。返回的是计算机中起始时刻过去的秒数。是一个浮点数。 可以使用time.ctime将这个浮点数转换为UTC时间。 |
参考网页:
1.http://wangwei007.blog.51cto.com/68019/1104940 python os.path模块常用方法详解
2.http://www.elias.cn/Python/GetPythonPath?from=Develop.GetPythonPath 如何获得Python脚本所在目录的位置