首页 > python调用模块路径

python调用模块路径

问题是这样的,我建立了一个包 目录是这样的!

假如我在 'seo.py' 需要打开StopwordsCN.txt 这个文件.
就应该这样写代码:
open('StopwordsCN.txt')
测试,结果在seo.py中运行成功了.

但是如果作为第三方模块的导入,就找不到路径了.

后来检查发现是这样的.
在哪里调用,这个StopwordsCN.txt就要放在哪里
不过这样显得很方便.
请问有什么比较好的解决方法?
除了直接写上绝对路径,还有什么更好的办法吗?


楼上的说的是对的,加载的时候默认的目录是工作目录,而不是源码的目录。
你可以根据seo.py得到工作目录,切换完了再切换回去

# -*- coding: utf-8 -*-

import os

# 获取文件所在的目录
DIR = os.path.dirname(__file__)

# 第三方模块加载及处理
# xxx

# 先保存加载完第三方模块后的工作目录
cwd = os.getcwd()

try:
    os.chdir(DIR)
    # 后面的逻辑
except Exception as e:
    pass
finally:
    # 再切换回来
    os.chdir(cwd)

可以调用os.chdir 指定工作空间

import os
work_path = r"somewhere/StopwordsCN.txt"
os.chdir(work_path)

如里StopwordsCN.txt的数据不需要长久保留,可以扔到/tmp目录
或者扔到调用程序的目录下,因为你做为一个插件形式存在,只管功能,而不应该去管理数据


试试这个? Python在线编译执行


临时切换目录应该是可行的(我没试过),不过那显然不是长久之计,而且一旦用完之后忘记切换回去也容易照成其它问题

py在读取文件时,如果文件所在的目录相对于读取的代码所在文件时固定的,那么可以获取到程序所在文件的目录来查找到要读取的文件所在的目录,如下代码

path = os.path.split(os.path.realpath(__file__))[0]
confDir = os.path.join(path, '../conf')
file = open(os.path.join(confDir, 'test.conf'), 'r')

另外这种类似配置文件的非程序代码建议单独另存一个目录


同意@accyl的做法,可以在稍微改进一下:

# seo.py
# coding: utf-8

path = os.path.dirname(os.path.realpath(__file__))                                                                                                                
with open(os.path.join(path, 'StopwordsCN.txt'), 'r') as f:
    # f.read()...
    pass 

如果StopwordsCN.txt内容不大就放在py文件中,使用StringIo方式读!

【热门文章】
【热门文章】