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程序语言快速上手教程
Jul 18 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python爬虫实现中英翻译词典
Jun 25 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
python实现猜数字游戏
Mar 25 Python
python字符串格式化方式解析
Oct 19 Python
Python使用pdb调试代码的技巧
May 03 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
python 写一个文件分发小程序
Dec 05 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通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php array的学习笔记
2012/05/16 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
深入理解PHP中的global
2014/08/19 PHP
linux中cd命令使用详解
2015/01/08 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
PHP实现搜索相似图片
2015/09/22 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
Javascript的一种模块模式
2008/03/22 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
JS实现简单日历特效
2020/01/03 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Python迭代用法实例教程
2014/09/08 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
wxPython多个窗口的基本结构
2019/11/19 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
python实现图片转字符画
2021/02/19 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
农救科工作职责
2013/11/27 职场文书
撤诉申请怎么写
2015/05/19 职场文书
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android