- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 anaconda conda
包框架构建 python 3.6 包。该包似乎在源文件方面运行良好。没有构建错误等。但是,我正在尝试在我存储的地方添加新功能包中的一些小 CSV 数据文件。我想使用 pandas
我遇到的问题是我似乎无法引用亲戚从包内正确的文件路径。如果我是,那么代码就可以工作比如说,当我在一个包中时,Jupyter
notebook 不工作。这路径问题似乎是问题出现的方式,但我怀疑它有更多与如何在包中处理内部寻址有关。
错误信息是:
FileNotFoundError: File b'data.csv' does not exist
此错误的奇怪之处在于 data.csv
文件与尝试访问它的 python 文件位于同一目录中。所以我不明白为什么下面的 python 模块 reader.py
似乎找不到这个文件。
所以让我给出一个包结构和代码的最小示例。
/project
/docs
/packaging
/conda_build_files
bld.bat
build.sh
meta.yaml
/src
/data
__init__.py
reader.py
data.csv #PROBLEM AREA
__init__.py
module1.py
setup.py
README.rst
所以问题是文件reader.py
使用pandas
读取csv文件进入数据框。 Module1
然后调用 reader
来获取数据。
所以代码设置如下:
##reader.py
import pandas as pd
class Reader():
def read():
return pd.read_csv('data.csv')
然后在 module1 中我有如下代码:
##module1.py
from .data.reader import Reader
import pandas as pd
def main():
dat = Reader.read()
print(dat.head())
所以这就是我收到有关 data.csv
不存在的奇怪错误的地方。现在在这种情况下,我什至不需要相对导入,因为 Reader
类和data.csv
文件位于同一文件夹中。是的,出于某种原因我明白了奇怪的错误信息。
data.csv
文件包含在 MANIFEST.in
文件中。
我的 setup.py
看起来像这样。
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
setup(
name='pkg',
version='0.6.0',
description="desc",
long_description=readme + '\n\n' + history,
author="me",
author_email='me',
url='https://github.com/.../pkg',
packages=[
'pkg',
],
package_dir={'pkg':
'pyugend'},
package_data={
'mydata': ['pkg/data/*.csv'],
},
include_package_data=True,
install_requires=requirements,
license="ISCL",
zip_safe=False,
keywords='pkg',
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'Programming Language :: Python :: 3.6',
],
test_suite='tests',
tests_require=test_requirements
)
meta.yaml
文件也很普通:
package:
name: pkg
version: "0.6"
source:
git_url: https://github....
build:
# noarch_python: True
# preserve_egg_dir: True
entry_points:
requirements:
build:
- python
run:
- python
- numpy
- pandas
- docopt
- matplotlib
about:
license: MIT License
最佳答案
尽管 reader.py
存在于何处,但您创建的 Python 实例仍在您启动的本地目录中运行。换句话说,如果您在 C:\Users\krishnab
中打开 CMD 提示符(或终端)并启动 Python,则该 Python 实例的 C:\Users\krishnab
为它的基地位置。
当 pd.read_csv('data.csv')
被调用时,Python 在当前工作目录中寻找 data.csv
,在这个例子中是 C:\Users\krishnab
.
您可以在/data 下添加一个额外的空 python 文件。它只会用于获取data.csv
的目录。
/src
/data
__init__.py
reader.py
data.csv
other.py
和other.py
有内容:
# other.py
pass
在reader.py
中,您可以导入other
并使用__file__
属性来获取路径。
reader.py
的内容:
from . import other
import pandas as pd
import os
data_dir = os.path.dirname(os.path.abspath(other.__file__))
class Reader:
def read(self):
return pd.read_csv(data_dir+'/data.csv')
关于python - Anaconda 包问题 : An internal module cannot find a data file located in the same directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784295/
我是一名优秀的程序员,十分优秀!