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实现基本线性数据结构
Aug 22 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
Apr 22 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
python SVD压缩图像的实现代码
Nov 05 Python
让你的Python代码实现类型提示功能
Nov 19 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
python实时监控logstash日志代码
Apr 27 Python
Anaconda详细安装步骤图文教程
Nov 12 Python
Python 可视化神器Plotly详解
Dec 26 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
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
JS实现简单日历特效
2020/01/03 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
python将unicode转为str的方法
2017/06/21 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
基于python log取对数详解
2018/06/08 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
Python图像读写方法对比
2020/11/16 Python
python实现图片转字符画的完整代码
2021/02/21 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
科研先进个人典型材料
2014/01/31 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
不错的求职信范文
2014/07/20 职场文书
大学生年度个人总结
2015/02/15 职场文书
预备党员转正意见
2015/06/01 职场文书
转变工作作风心得体会
2016/01/23 职场文书
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript