http://www.jb51.net/article/49035.htm

文章主要介绍了Python获取脚本所在目录的正确方法

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]的输出还会变化:

如果把依赖库用默认的方式打包为zip文件,那么sys.path[0]会输出“C:\test\getpath\libarary.zip”;

如果在setup.py里面指定zipfile=None参数,依赖库就会被打包到exe文件里面,那么sys.path[0]会输出“C:\test\getpath\getpath.exe”。

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]

其中__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”。

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的所在目录

python 获取脚本当前路径_Python获取脚本所在目录的正确方法相关推荐

  1. python获取当前路径的方法_Python获取脚本所在目录的正确方法【转】

    原博文 2015-09-24 10:21 − 1.以前的方法如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数.如果是要获得当前执行的脚本的所在目录位置,那么需要 ...

  2. php 获取key的位置,PHP获取当前所在目录位置的方法

    本文实例讲述了PHP获取当前所在目录位置的方法.分享给大家供大家参考.具体分析如下: 如果要获取脚本文件的目录,要应用函数getcwd()来实现.函数声明如下: string getcwd ( voi ...

  3. python提高图片分辨率_python 获取图片分辨率的方法

    python 获取图片分辨率的方法 pil版: from PIL import Image filename = r'E:\data\yangben\0.jpg' img = Image.open(f ...

  4. python查看网速_Python获取服务器网速

    实时获取服务器网速的脚本 CentOS6版本 #!/usr/bin/python import os, re, time def get_net(): return re.search('eth0: ...

  5. python所有的父类_python获取父类的子类(遍历,递归),并循环执行所有子类的某一方法...

    前言 换了新工作,踏足于python语言的开发,也把自己的学习过程记录下来. 一,递归获取某一父类的所有子类 all_subclasses = {'0': '0'} def get_all_class ...

  6. python获取当前年月日_Python获取、格式化当前时间日期的方法

    Python获取当前时间_获取格式化时间: Python获取当前时间: 使用 time.time( ) 获取到距离1970年1月1日的秒数(浮点数),然后传递给 localtime 获取当前时间 #使 ...

  7. python处理行情数据_Python获取股票历史、实时数据与更新到数据库

    要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...

  8. python高德 查询县_Python获取高德地图省市区县列表

    项目中需要用省市区来进行检索,原想高德地图肯定会有API来获得这些数据,结果没有找到,有一个接口好像可以用,但是会附带大量的边界坐标点. 所以就不如自己把高德的省市区列表扒下来,自己写接口来完成这个功 ...

  9. python selenium爬虫实例_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

最新文章

  1. View (二) 自定义属性
  2. LA2678最短子序列
  3. 在流程梳理的过程中,OA工作组应采用国际先进方法
  4. mybatis 原理_图解源码 | MyBatis的Mapper原理
  5. python自动生成word版本试卷_Python解决问题:生成包含加减练习题的Word文件
  6. NB-IoT将给智能锁行业带来哪些影响?
  7. .sql文件_自己动手写SQL查询引擎
  8. 商业认知,新的一年已经开始,许多老板都制订了新的目标
  9. Async Python 竟不比sync Python 快,怎么回事?
  10. C++ 常见错误(02) —— 将dll(用c++写的)处理的结果展示在界面上
  11. gsonformat java代码_GSONFormat的简单使用
  12. 修改斐讯k3天气服务器,夏天了,给斐讯K3换智能调温套件降降温
  13. 笔记:常见TCP端口号
  14. 1380Problem C:zyf的A+B问题
  15. 前有狗屁不通文章生成器 | 后有申论生成器
  16. android https cer证书转换BKS
  17. 欧几里得  拓展欧几里得算法 讲解 (Euclid Extend- Euclid Algorithm)
  18. 判断矩形是否相交(包含,点相交,边相交)
  19. HBCTF第三场WP
  20. 2020 年 10 月编程语言排行榜

热门文章

  1. sql语句基础学习(不涉及多表查询)
  2. 山东大学有人陪!真的吗?_10,000小时! 您真的需要那么多吗?
  3. java map reduce 原理_MapReduce实现原理详解
  4. 如何阅读python文档_python 文档怎么看-问答-阿里云开发者社区-阿里云
  5. 蓝桥杯:试题 历届真题 修改数组【第十届】【省赛】【研究生组】Java实现
  6. docker 2376端口 CA 认证,并不能阻止服务器成为肉鸡
  7. 前端基础部分错题记录
  8. Python os模块文件操作(二)
  9. CSS中a标签样式原则 a:link a:visited a:hover a:active执行顺序
  10. .NET中多线程调试的一个办法