在 python 中如何获得 .py 上层文件夹的路径
PHP中文网
PHP中文网 2017-04-17 13:01:18
[Python讨论组]

假设有个文件的位置是 ...A/B/main.py,main.py 是需求被执行的代码。
如何获得文件夹 A 的完整路径呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
黄舟

获得 main,py 上上层的路径

import os
print os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))

解释下:

__file__:当前文件路径
os.path.dirname(file): 某个文件所在的目录路径
os.path.join(a, b, c,....): 路径构造 a/b/c
os.path.abspath(path): 将path从相对路径转成绝对路径
os.pardir: Linux下相当于"../"
迷茫

获取 python 文件位置的模块有 os os.path sys. 题主的问题可以如下:

# -*- coding: utf-8 -*-
import sys, os
pwd = sys.path[0]    # 获取当前执行脚本的位置
print os.path.abspath(os.path.join(pwd, os.pardir, os.pardir))

一般获取文件位置方法有

  • sys.path[0] 获取主执行文件路径, 可能是一个相对路径,通常abspath是保险.
  • os.getcwd() 获取解释器执行脚本时候的所在地方
  • __file__ 获取模块所在的路径的

区别:

  1. 在Python控制台下,直接使用 print __file__ 是会导致 name '__file__' is not defined 错误的,因为这时没有在任何一个脚本下执行, 也就是没有 file的定义了。
  2. 在主执行文件中,都没有差别,在不同文件下,就不同了,例如 在 A 目录下执行:

    $ A python ./B/main.py # os.getcwd() 将会得到 A 锁住目录。sys.path[0] 则是脚本 main.py 的目录

个人觉得 sys.path 比较稳妥

PHP中文网

很丑的方式, 用__file__在打包成windows的EXE时会出问题:

import os.path
os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), '..'))
PHPz
import re, sys
match = re.match('(.*)/(.*)', sys.path[0])
print match.group(1)
黄舟
import inspect
print inspect.stack()[-1][1]

参考:http://qa.helplib.com/127252

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号