Python:从子目录导入模块,该子目录加载具有相对路径

时间:2016-11-30 22:45:13

标签: python import path

这是我的第一个python项目,我正在尝试构建专业的结构/层次结构。我有以下目录结构:

project/  
---__init__.py  
---main.py  
---data_lib/  
------__init__.py  
------load.py  
------file.csv 

load.py中的代码是:

import pandas as pd
def load_csv():
    print pd.read_csv('file.csv')
if __name__=='__main__':
    load_csv()

main.py中的代码是:

from data_lib.load import load_csv
load_csv()

当load.py独立运行时,我得到了加载的csv文件的pandas数据帧的打印输出。运行main.py时出现错误IOError:File file.csv不存在。我可以通过在'file.csv'之前添加路径前缀来解决这个问题:

if __name__=='__main__':
    path_prefix=''
else:
    path_prefix='data_lib/'

这是标准的解决方案和编程实践吗?或者我应该避免这种情况而不是做其他事情(特别是因为csv文件将需要定期更新而不会影响任何其他代码文件)?

1 个答案:

答案 0 :(得分:0)

在这种情况下常见的习惯用法是在所有文件路径前加上模块的绝对路径:

group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {

     if (group.getSelectedToggle() != null) {


         // Do something here with the radioButton

     }

 } 
 });

这样,无论您从哪里调用模块,您仍然可以从模块中加载资源。

如您所述,添加路径前缀仅在从父目录调用模块时才有效。当你从其他地方打电话时会发生什么?