嗨,我在python打包工作。我有3个non-code
文件,即['synonyms.csv', 'acronyms.csv', 'words.txt']
。在
Wordproject/WordProject/Repository/DataBank/
RepositoryReader
类,路径是Wordproject/WordProject/Repository/
RepositoryReader
的当前位置,然后查找名为DataBank
的subdirectory
,并在那里查找3个文件。在问题是当我从代码中创建一个egg
,然后运行它时
我的代码显示错误:
Could not find the file at X:\1. Projects\Python\Wordproject\venv\lib\site-packages\Wordproject-1.0-py3.6.egg\Wordproject\Repository\DataBank\synonyms.csv
如果路径是一个鸡蛋,它将无法从路径中获取或读取文件。有什么办法吗?这些文件必须在egg
中。在
基于documentation,我们可以用多种方式读取文件的内容。在
解决方案1:直接将文件内容读入内存。
不在本地提取文件。在
现在,
tfile
是您的本地临时文件句柄。它的名称是tfile.name
,所有的文件操作,如open(tfile)
等,在这方面工作正常。tfile.close()
必须在末尾调用以关闭句柄。在文件的内容可以由
myfile.read()
本身读取,但一旦退出上下文,就会丢失myfile句柄。所以,如果需要为其他操作传递文件,则会将文件的内容复制到临时文件中。在溶液2:局部提取卵子成员
zipfile提供用于提取特定成员的API
^{pr2}$溶液3:提取整个鸡蛋
另一种解决方案是提取临时文件夹中的egg,然后读取该文件。可以在命令行上提取Egg,如下所示
egg
文件只是重命名为.zip文件。在您可以使用^{} 库打开egg并提取或读取所需的文件。在
您可以尝试在这里做两件不同的事情:
pip install
时间将安装在其他地方的数据文件放到一个您可以正常访问的位置。在在PyPA/
setuptools
文档的the section on data files中都有解释。我想你想要第一个,这在Accessing Data Files at Runtime小节中有介绍:沿着这个链接,你会发现一些看起来像是粗糙的旧PEAK文档,但那只是因为它们确实是粗糙的旧PEAK文档。有一个version buried inside the ^{} docs ,一旦你设法找到它,你会发现它更容易阅读和导航。在
正如它所说的,您可以使用
get_data
(它在egg/zip中工作),然后返回到访问文件(从源代码运行时可以工作),但是最好使用pkg_resources
中的包装器。基本上,如果您的代码是这样做的:…将其更改为:
^{pr2}$请注意,
resource_stream
文件总是以二进制模式打开的。所以如果你想把它们当作文本来读,你需要在它们周围加上TextIOWrapper
,或者对每一行进行解码。在相关问题 更多 >
编程相关推荐