python - 导入包含要读取的文件路径的类
问题描述
我有以下文件结构:
app/
data/
data.csv
module/
__init__.py
script.py
__init__.py
config.py
我的配置类包含一组从 csv 文件中读取的 Pandas 数据帧。这些数据框在我的代码库中使用:
import pandas as pd
class Config:
data = pd.read_csv('data/data.csv')
data2 = pd.read_csv('data/data2.csv')
我的脚本包含:
from config import Config
返回:
FileNotFoundError: File b'data/data.csv' does not exist
如果 run.py 脚本存储在除顶层之外的任何位置。
如果在跨代码库的不同脚本中导入类,有没有办法让类具有一些存储的文件路径而不会导致找不到文件错误?
解决方案
尝试指定当前文件解析的路径中的文件。例如,如果您app/config.py
是这样的:
import pandas as pd
class Config:
data = pd.read_csv('data/data.csv')
data2 = pd.read_csv('data/data2.csv')
你想这样写路径:
mydir = os.path.dirname(os.path.abspath(__file__))
data = pd.read_csv(os.path.join(mydir, 'data/data.csv'))
data2 = pd.read_csv(os.path.join(mydir, 'data/data2.csv'))
这__file__
是 Python 中的魔术变量,可以告诉您您所在的文件。
基本上,每当您的脚本尝试打开文件时,它都是相对于您的当前目录的。因此,您需要上述技巧来查找相对于脚本目录而不是当前目录的文件。
推荐阅读
- logstash - 如何在logstash中重新启动多个conf文件
- r - 根据它们是在两个值之间还是低于一个值来更改数据框中的条目
- ssis - 从 SSMS 运行 DTEXEC 以运行 SSIS 目录包
- neo4j - Neo4j:弱连接组件(WCC),仅将大网络保留在内存图中
- javascript - Artillery.io 总是返回失败:ensure.p95 < 200
- json-rpc - 无法从 json rpc 连接到数字海洋 ip
- laravel - 无法在 Laravel Algolia Scout 中使用 whereHas
- java - 为 XWPFParagraph 设置背景颜色
- matlab - 如何使用 MATLAB 代码绘制具有不同颜色的每个条?
- java - Gradle SubProject 任务没有被拾取