1.参考

如何获得Python脚本所在目录的位置

Python 相对导入与绝对导入

还没细看

2.不考虑exe打包

sys.path[0]                                   #顶层运行脚本的绝对目录

os.path.split(os.path.realpath(__file__))[0]  #目前所在脚本的绝对目录
os.path.dirname(os.path.realpath(__file__))

3.兼容 pyinstaller xxx,py -F 所生成的exe可执行程序

生成exe之后需要手动生成子文件夹和相应的txt等非py文件

在任一脚本中(含子目录)获取顶层运行的exe或py文件的绝对目录

import os, sys
if sys.argv[0][-3:] == 'exe':
(top_dir, _) = os.path.split(sys.argv[0])
if top_dir == '':
top_dir = os.getcwd() #os.path.abspath('.') 也行
else:
top_dir = sys.path[0]

4.其他

(1)连接目录

# with open(os.path.join(os.getcwd(), '/sub/sub.txt')) as f:  #fail
# with open(os.path.join(os.getcwd(), 'sub/sub.txt')) as f: #pass
with open(os.path.join(os.getcwd(), './sub/sub.txt')) as f: #pass
print f.read()

(2)根据需要临时修改sys.path

sys.path.append('G:/xxx')

5.测试py

G:\test\path

____file:path.py

____dir:sub

________file:__init__.py

________file:sub_path.py

path.py

#!usr/bin/env python
#coding:utf-8 import os, sys
from sub.sub_path import print_sub_path def print_path():
print 'in path.py'
print '{:<20}: {}'.format('os.getcwd()', os.getcwd()) #命令提示符显示目录
print '{:<20}: {}'.format('os.path.abspath(".")', os.path.abspath('.')) #命令提示符显示目录
print '{:<20}: {}'.format('sys.argv[0]', sys.argv[0]) #命令提示符显示目录>之后除去python的所有字符 print '{:<20}: {}'.format('sys.path[0]', sys.path[0]) #自动将顶层运行脚本所在路径 加入sys.path即寻找模块的搜索路径列表
print '{:<20}: {}'.format('realpath(__file__)', os.path.split(os.path.realpath(__file__))[0]) #目前所在脚本的绝对目录 if __name__ == '__main__':
print_path()
print_sub_path()
raw_input(':')

sub.py

#!usr/bin/env python
#coding:utf-8 import os, sys def print_sub_path():
print 'in sub/sub_path.py' print '{:<20}: {}'.format('os.getcwd()', os.getcwd())
print '{:<20}: {}'.format('os.path.abspath(".")', os.path.abspath('.'))
print '{:<20}: {}'.format('sys.argv[0]', sys.argv[0]) print '{:<20}: {}'.format('sys.path[0]', sys.path[0])
print '{:<20}: {}'.format('realpath(__file__)', os.path.split(os.path.realpath(__file__))[0]) #目前所在脚本的绝对目录 if __name__ == '__main__':
print_sub_path()

运行结果:

C:\Users\win7>python G:\test\path\path.py
in path.py
os.getcwd() : C:\Users\win7
os.path.abspath("."): C:\Users\win7
sys.argv[0] : G:\test\path\path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : C:\Users\win7
os.path.abspath("."): C:\Users\win7
sys.argv[0] : G:\test\path\path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path\sub
: C:\Users\win7>cd g:
G:\ C:\Users\win7>g: G:\>python test/path/path.py
in path.py
os.getcwd() : G:\
os.path.abspath("."): G:\
sys.argv[0] : test/path/path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : G:\
os.path.abspath("."): G:\
sys.argv[0] : test/path/path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path\sub
: G:\>cd test/path G:\test\path>python path.py
in path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path\sub
: G:\test\path>python G:\test\path\path.py
in path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : G:\test\path\path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : G:\test\path\path.py
sys.path[0] : G:\test\path
realpath(__file__) : G:\test\path\sub
:

6.测试exe

运行结果:

#直接双击 exe
in path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : G:\test\path\path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M5247~1
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : G:\test\path\path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M5247~1
realpath(__file__) : C:\Users\win7\AppData\Local\Temp\_M5247~1\sub
: C:\Users\win7>G:\test\path\path.exe
in path.py
os.getcwd() : C:\Users\win7
os.path.abspath("."): C:\Users\win7
sys.argv[0] : G:\test\path\path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M83A1~1
realpath(__file__) : C:\Users\win7
in sub/sub_path.py
os.getcwd() : C:\Users\win7
os.path.abspath("."): C:\Users\win7
sys.argv[0] : G:\test\path\path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M83A1~1
realpath(__file__) : C:\Users\win7\AppData\Local\Temp\_M83A1~1\sub
: C:\Users\win7>cd g:
G:\ C:\Users\win7>g: G:\>cd test/path G:\test\path>path.exe
in path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M9C69~1
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M9C69~1
realpath(__file__) : C:\Users\win7\AppData\Local\Temp\_M9C69~1\sub
: G:\test\path>G:\test\path\path.exe
in path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : G:\test\path\path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M9C4E~1
realpath(__file__) : G:\test\path
in sub/sub_path.py
os.getcwd() : G:\test\path
os.path.abspath("."): G:\test\path
sys.argv[0] : G:\test\path\path.exe
sys.path[0] : C:\Users\win7\AppData\Local\Temp\_M9C4E~1
realpath(__file__) : C:\Users\win7\AppData\Local\Temp\_M9C4E~1\sub
:

  

python之工作目录和文件引用的更多相关文章

  1. GNU make简要介绍①指定变量、自动推导规则、清除工作目录过程文件

    Makefile简介 在执行make之前需要一个命名为Makefile的特殊文件来告诉make需要做些什么. 当使用 make 工具进行编译时,工程中以下几种文件在执行 make 时将会被编译 (重新 ...

  2. 如何查看与更改python的工作目录?

    在编写<机器学习实战>第二章kNN代码时遇到问题,即在自己编写好模块后,使用ipython进行import时,出现以下错误: 可知若想找到该模块,需将工作目录改变到当前文件(模块py文件) ...

  3. python基础--管理目录与文件

    1) 文件夹 os.listdir() #显示文件夹下所有文件 os.getcwd() #获取当前工作目录 os.chdir() #切换目录 os.mkdir() #建立目录 os.path.exis ...

  4. [Python]切换工作目录|python将目录切换为脚本所在目录

    Python使用os.chdir命令切换python工作目录 代码示例: In []: import os In []: os.system("pwd") /home/wangju ...

  5. python生成器 获取 目录下文件

    # os.walk()和os.list 都是得到所有文件的列表, 如果目录下文件特别多, 上亿了, 我们就需要生成器的方式获取 # 要求目录下面没有目录, 会递归到子目录下面找文件, (如果有子目录可 ...

  6. python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息

    运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...

  7. 使用Python实现不同目录下文件的拷贝

    目标:要实现将一台计算机的共享文件夹中的文件备份到另一台计算机,如果存在同名的文件只要文件的大小和最后修改时间一致,则不拷贝该文件 python版本:Python3.7.1 python脚本: fro ...

  8. Python 调用上级目录的文件

    程序结构如下: – src |-- mod1.py |-- lib | |-- mod2.py |-- sub | |-- test.py 具体代码如下: 在test.py里调用mod1 mod2 i ...

  9. [Python] 目录和文件操作

    在Linux系统下用Python写脚本,肯定不能避免各种与目录和文件夹有关的操作.为了以后方便查阅,简单地针对Python中与目录和文件夹有关的操作进行汇总. 需要实现导入的模块为: import o ...

随机推荐

  1. 题解-TIOJ1905 最理想的身高差

    Problem 题目原型 题目大意:求区间最小差值 序列长度\(1e5\),询问\(2e5\) Solution 总体思路就是找出所有可能作为答案的点对,用资料结构_(:зゝ∠)_维护,然后询问 至于 ...

  2. c++ 值转换

    1.double,float 四舍五入,保留小数位数. void MainWindow::on_pushButton_clicked() { double number=3.141592; ); qD ...

  3. JS,Jquery获取各种屏幕的宽度和高度(转载)

    原文:https://www.cnblogs.com/fuyuanming/articles/5453756.html 1.JS 网页可见区域宽: document.body.clientWidth ...

  4. java按照关键字指定的key删除redis(支持模糊删除)

    pom依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</a ...

  5. jQuery-lazyload参数

    1.placeholder placeholder:'图片地址',用图片提前占据将要加载的图片的位置. 2.effect effect:‘fadeIn’ 表示用何种效果载入,eg:show()直接加载 ...

  6. SQL Server 2012-2016-2017 简体中文版下载和序列号

    注:本文来源于<SQL Server 2012-2016-2017 简体中文版下载和序列号> SqlServer 2017 下载地址及密钥 下载地址:ed2k://|file|cn_sql ...

  7. Confluence 6 与其他应用整合

    你可以使用 应用链接(Application Links)将 Confluence 与其他应用进行整合.应用链接允许你连接 Confluence 到其他的应用,例如 JIRA 软件或者 JIRA 服务 ...

  8. json的转换操作

    toJSON 把JS对象{ 'x': 2, 'y': 3 }转为JSON对象格式的字符串   不能转化字符串 比如"{ 'x': 2, 'y': 3 }" 可以转格式不标准的jso ...

  9. dubbo源码之服务发布与注册

    服务端发布流程: dubbo 是基于 spring 配置来实现服务的发布的,对于dubbo 配置文件中看到的<dubbo:service>等标签都是服务发布的重要配置 ,对于这些提供可配置 ...

  10. unity 3D 学习笔记

    1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在U ...