python调用模块路径

发布于 2022-09-03 00:24:21 字数 459 浏览 16 评论 0

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

clipboard.png

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

英雄似剑 2022-09-10 00:24:21

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

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')

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

傻比既视感 2022-09-10 00:24:21

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

import os
work_path = r"somewhere/StopwordsCN.txt"
os.chdir(work_path)
神魇的王 2022-09-10 00:24:21

楼上的说的是对的,加载的时候默认的目录是工作目录,而不是源码的目录。
你可以根据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)
哀由 2022-09-10 00:24:21

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

南冥有猫 2022-09-10 00:24:21

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

沒落の蓅哖 2022-09-10 00:24:21

同意@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 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文