python3获取当前目录的实现方法


Posted in Python onJuly 29, 2019

1. 以前的方法

如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。

如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会自动把sys.argv[0]加入sys.path。

具体来说,如果你在C:\test目录下执行python getpath\getpath.py,那么os.getcwd()会输出“C:\test”,sys.path[0]会输出“C:\test\getpath”。

更特别地,如果你用py2exe模块把Python脚本编译为可执行文件,那么sys.path[0]的输出还会变化:

1.如果把依赖库用默认的方式打包为zip文件,那么sys.path[0]会输出“C:\test\getpath\libarary.zip”;

2.如果在setup.py里面指定zipfile=None参数,依赖库就会被打包到exe文件里面,那么sys.path[0]会输出“C:\test\getpath\getpath.exe”。

(Edit Section ↓)

2.正确的方法

但以上这些其实都不是脚本文件所在目录的位置。

比如C:\test目录下还有一个名为sub的目录;C:\test目录下有getpath.py,sub目录下有sub_path.py,getpath.py调用sub_path.py;我们在C:\test下执行getpath.py。如果我们在sub_path.py里面使用sys.path[0],那么其实得到的是getpath.py所在的目录路径“C:\test”,因为Python虚拟机是从getpath.py开始执行的。如果想得到sub_path.py的路径,那么得这样:

os.path.split(os.path.realpath(__file__))[0]

[Get Code]

其中__file__虽然是所在.py文件的完整路径,但是这个变量有时候返回相对路径,有时候返回绝对路径,因此还要用os.path.realpath()函数来处理一下。也即在这个例子里,os.path.realpath(__file__)输出是“C:\test\sub\sub_path.py”,而os.path.split(os.path.realpath(__file__))[0]输出才是“C:\test\sub”。

(Edit Section ↓)

3.实例说明

总之,举例来讲,os.getcwd()、sys.path[0] (sys.argv[0])和__file__的区别是这样的:

假设目录结构是:

C:\test
 |
 [dir] getpath
 |
 [file] path.py
 [dir] sub
  |
  [file] sub_path.py

然后我们在C:\test下面执行python getpath/path.py,这时sub_path.py里面与各种用法对应的值其实是:

•os.getcwd() “C:\test”,取的是起始执行目录
•sys.path[0]或sys.argv[0] “C:\test\getpath”,取的是被初始执行的脚本的所在目录
•os.path.split(os.path.realpath(__file__))[0] “C:\test\getpath\sub”,取的是__file__所在文件sub_path.py的所在目录

PS:下面看下python3获取当前目录和上级目录

d = path.dirname(__file__) #返回当前文件所在的目录 
# __file__ 为当前文件

获得某个路径的父级目录:

parent_path = os.path.dirname(d) #获得d所在的目录,即d的父级目录 
parent_path = os.path.dirname(parent_path) ##获得parent_path所在的目录即parent_path的父级目录

获得规范的绝对路径:

abspath = path.abspath(d) #返回d所在目录规范的绝对路

总结

以上所述是小编给大家介绍的python3获取当前目录的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python pass 语句使用示例
Mar 11 Python
讲解Python中的递归函数
Apr 27 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
python实现微信远程控制电脑
Feb 22 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
pytorch 实现查看网络中的参数
Jan 06 Python
Python tkinter三种布局实例详解
Jan 06 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 #Python
Django框架创建mysql连接与使用示例
Jul 29 #Python
python使用minimax算法实现五子棋
Jul 29 #Python
浅析python 中大括号中括号小括号的区分
Jul 29 #Python
Django分页功能的实现代码详解
Jul 29 #Python
微信小程序python用户认证的实现
Jul 29 #Python
Python 堆叠柱状图绘制方法
Jul 29 #Python
You might like
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
uploadify 3.0 详细使用说明
2012/06/18 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
javascript实现日历效果
2019/06/17 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Python类的继承用法示例
2019/01/31 Python
django框架创建应用操作示例
2019/09/26 Python
python常用排序算法的实现代码
2019/11/08 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
贷款担保书范文
2014/05/13 职场文书
应届大学生求职信
2014/07/20 职场文书
如何写辞职信
2015/05/13 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
《雷雨》教学反思
2016/02/20 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL