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 随机生成中文验证码的实例代码
Mar 20 Python
python快速查找算法应用实例
Sep 26 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Python文本统计功能之西游记用字统计操作示例
May 07 Python
python下载微信公众号相关文章
Feb 26 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
Python基于requests库爬取网站信息
Mar 02 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Python生成随机验证码代码实例解析
Jun 09 Python
python求解汉诺塔游戏
Jul 09 Python
让你相见恨晚的十个Python骚操作
Nov 18 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可逆加密/解密函数分享
2012/09/25 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP会话控制实例分析
2016/12/24 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
跟老齐学Python之集合(set)
2014/09/24 Python
用python实现百度翻译的示例代码
2018/03/09 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
最新自我评价范文
2013/11/16 职场文书
计算机学生求职信范文
2014/01/30 职场文书
团结演讲稿范文
2014/05/23 职场文书
暑期培训心得体会
2014/09/02 职场文书
股东合作协议书
2014/09/12 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers