这是我尝试构建专业结构/层次结构的第一个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.csv不存在。我可以通过在以下定义的“ file.csv”之前添加路径前缀来解决此问题:
if __name__=='__main__':
path_prefix=''
else:
path_prefix='data_lib/'
这是标准的解决方案和编程实践,还是我应该避免这样做,而应该做其他事情(特别是因为csv文件将是一个需要定期更新而不会影响任何其他代码文件的文件)?
在这种情况下,常见的惯用法是在所有文件路径的前面加上模块的绝对路径:
from os import path
path_prefix = path.dirname(path.abspath(__file__))
csv_path = path.join(path_prefix, 'file.csv')
这样,无论从哪里调用模块都无所谓,您仍然可以从模块内部加载资源。
如您所描述的那样,添加路径前缀仅在您从父目录中调用模块时才有效。当您从其他地方调用它时会发生什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句