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实现的计数排序算法示例
Nov 29 Python
python实现自动登录后台管理系统
Oct 18 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
python,Django实现的淘宝客登录功能示例
Jun 12 Python
python使用递归的方式建立二叉树
Jul 03 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
python的flask框架难学吗
Jul 31 Python
Python中rapidjson参数校验实现
Jul 25 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
php模板函数 正则实现代码
2012/10/15 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
提高网站信任度的技巧
2008/10/17 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
python3.x实现发送邮件功能
2018/05/22 Python
Python魔法方法详解
2019/02/13 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
pytorch实现查看当前学习率
2020/06/24 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
高中军训感言400字
2014/02/24 职场文书
大课间活动实施方案
2014/03/06 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
比赛主持人开场白
2015/05/29 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python