我正在用Python编写一些内容,我希望使用包中文件的预定义文本。不知何故,我无法让它在Eclipse PyDev Console中运行。
这是我的路径结构。来自" story.py"我想使用" starttext"。
的内容我尝试使用os.getcwd()和os.path.dirname(sys.argv [0])的多种变体的open()导致
FileNotFoundError:[Errno 2]没有这样的文件或目录:' .. \ starttext'
我的最后一次尝试是尝试
之类的东西import pkg_resources
resource_package = __name__
resource_path = '/'.join(('.', 'starttext'))
template = pkg_resources.resource_stream(resource_package, resource_path)
导致:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\Python\Python36-64\lib\site-packages\pkg_resources\__init__.py", line 1232, in resource_stream
self, resource_name
File "C:\Program Files\Python\Python36-64\lib\site-packages\pkg_resources\__init__.py", line 1479, in get_resource_stream
return io.BytesIO(self.get_resource_string(manager, resource_name))
File "C:\Program Files\Python\Python36-64\lib\site-packages\pkg_resources\__init__.py", line 1482, in get_resource_string
return self._get(self._fn(self.module_path, resource_name))
File "C:\Program Files\Python\Python36-64\lib\site-packages\pkg_resources\__init__.py", line 1560, in _get
"Can't perform this operation for loaders without 'get_data()'"
NotImplementedError: Can't perform this operation for loaders without 'get_data()'
似乎与python 3.x有关?
这似乎是一件容易的事,我不明白什么是错的。 任何帮助表示赞赏。
谢谢。
更新
感谢ShmulikA,我将其更改为:
from os.path import dirname, join, abspath
filename = join(dirname(abspath(communitybot.anthology.teststory.story.__file__)), 'starttext')
file = open(filename, 'r')
content = file.read()
虽然我认为它有点长,但是我确定我在那里仍然做错了。
答案 0 :(得分:1)
好像你错过了\
- 使用os.path.join
:
from os.path import dirname, join, abspath
filename = join(dirname(abspath(__file__)), 'starttext')
file = open(filename, 'r')
__file__
- 模块源文件的路径(您也可以导入requests;requests.__file__
)os.path.abspath
- 返回绝对文件名(例如abspath('..')
返回/home
)os.path.dirname
- 返回文件的目录名os.path.join
- 加入兼容linux和windows的文件部分