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神器对付12306变态验证码
Jan 05 Python
python正则表达式re之compile函数解析
Oct 25 Python
python遍历文件夹下所有excel文件
Jan 03 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
Python实现的文轩网爬虫完整示例
May 16 Python
详解Python打包分发工具setuptools
Aug 05 Python
Python list与NumPy array 区分详解
Nov 06 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
关于Tensorflow分布式并行策略
Feb 03 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 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循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
php递归函数怎么用才有效
2018/02/24 PHP
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
js 上传图片预览问题
2010/12/06 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
vue2 前端搜索实现示例
2018/02/26 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Python下Fabric的简单部署方法
2015/07/14 Python
python实现日志按天分割
2019/07/22 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
详解Python time库的使用
2019/10/10 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python调用.NET库的方法步骤
2019/12/27 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书