问题是这样的,我建立了一个包 目录是这样的!
假如我在 'seo.py' 需要打开StopwordsCN.txt
这个文件.
就应该这样写代码:open('StopwordsCN.txt')
测试,结果在seo.py中运行成功了.
但是如果作为第三方模块的导入,就找不到路径了.
后来检查发现是这样的.
在哪里调用,这个StopwordsCN.txt
就要放在哪里
不过这样显得很方便.
请问有什么比较好的解决方法?
除了直接写上绝对路径,还有什么更好的办法吗?
问题是这样的,我建立了一个包 目录是这样的!
假如我在 'seo.py' 需要打开StopwordsCN.txt
这个文件.
就应该这样写代码:open('StopwordsCN.txt')
测试,结果在seo.py中运行成功了.
但是如果作为第三方模块的导入,就找不到路径了.
后来检查发现是这样的.
在哪里调用,这个StopwordsCN.txt
就要放在哪里
不过这样显得很方便.
请问有什么比较好的解决方法?
除了直接写上绝对路径,还有什么更好的办法吗?
可以调用os.chdir 指定工作空间
import os
work_path = r"somewhere/StopwordsCN.txt"
os.chdir(work_path)
楼上的说的是对的,加载的时候默认的目录是工作目录,而不是源码的目录。
你可以根据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)
同意@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
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
临时切换目录应该是可行的(我没试过),不过那显然不是长久之计,而且一旦用完之后忘记切换回去也容易照成其它问题
py在读取文件时,如果文件所在的目录相对于读取的代码所在文件时固定的,那么可以获取到程序所在文件的目录来查找到要读取的文件所在的目录,如下代码
另外这种类似配置文件的非程序代码建议单独另存一个目录