python项目导包路径设置、open打开文件的路径

总结:
 使用sys.path.insert添加项目根目录到搜索路径中,作为整个项目的导包路径
 使用相对路径打开文件:open(‘../../ab/a.txt’)
 使用绝对路径打开文件:open('/usr/project/ab/a.txt')

 如果需要获取项目目的导包路径,可以在项目的位置固定py文件中设置一个方法,这个方法的返回值是项目的导包路径
注意:
  在项目中我使用鼠标将一个py文件从一个包中拖到另一个包中。
  然后使用os.path.abspath('.')获得的路径,发现不论py文件移动到哪个包中,获取的路径都是文件开始创建时所在目录。
  然后使用os.path.abspath(__file__)获取路径,发现正是当前文件移动后的路径。
首先创建项目目录结构
先创建项目根目录文件夹pro,在项目根目录下运行下面代码,创建项目目
import os
import sys

#将项目跟根目录添加到搜索路径
root_path = os.path.normpath(os.path.abspath('.'))
sys.path.insert(0, root_path)

#创建目录
os.makedirs('bb/cc/dd/')
#os.path.normpath是格式路径的, 可以根据不同的平台格式化出正确的路径, 
#如win中‘\’, linux中是'/’, 这个方法可以格式化这些路径
chang_path = os.path.normpath(os.path.join(root_path, 'bb/cc/dd/'))
#变更路径
os.chdir(chang_path)
#创建文件
open('ff.py', 'w').close()
open('ee.txt', 'w').close()


#变更路径
os.chdir(root_path)

#创建目录
os.makedirs('hh/jj/kk/')
#os.path.normpath是格式路径的, 可以根据不同的平台格式化出正确的路径
chang_path = os.path.normpath(os.path.join(root_path, 'hh/jj/kk/'))
#变更路径
os.chdir(chang_path)
#创建文件
open('mm.py', 'w').close()
生成的目录结构为

在这里插入图片描述

然后在ff.py中写入一个方法
def abc():
    print('abc')
在ee.txt中写内容:abcdef
在mm.py文件中导入ff.py
import os
import sys
#将项目跟根目录添加到搜索路径
path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
root_path = os.path.normpath(path)
sys.path.insert(0, root_path)


from bb.cc.dd import ff

def mm():
    ff.abc()
mm()

#正常输出结果 打印abc
在mm.py文件中打开ee.txt文件
import os
import sys

#将项目跟根目录添加到搜索路径
path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
root_path = os.path.normpath(path)
sys.path.insert(0, root_path)


def mm():
    with open('bb/cc/dd/ee.txt') as f:
        print(f.read())
mm()

#运行报错
"""
报错信息:
Traceback (most recent call last):
  File "/home/myubuntu/Desktop/pro/hh/jj/kk/mm.py", line 12, in <module>
    mm()
  File "/home/myubuntu/Desktop/pro/hh/jj/kk/mm.py", line 10, in mm
    with open('bb/cc/dd/ee.txt') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'bb/cc/dd/ee.txt
"""

使用open打开文件的方式有两种:
第一:使用绝对路径, 如下代码:
import os
import sys

#将项目跟根目录添加到搜索路径
path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
root_path = os.path.normpath(path)
sys.path.insert(0, root_path)


def mm():
    #使用绝对路径
    file_path = os.path.normpath(os.path.join(root_path, 'bb/cc/dd/ee.txt'))
    with open(file_path) as f:
        print(f.read())
mm()

#正常输出结果, 打印abcdef

第二:使用相对路径, 如下代码

import os
import sys

#将项目跟根目录添加到搜索路径
path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
root_path = os.path.normpath(path)
sys.path.insert(0, root_path)


def mm():
    #使用相对路径
    with open('../../../bb/cc/dd/ee.txt') as f:
        print(f.read())
mm()

#正常运行, 打印结果为:abcdef
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值