如何在需要 os.path.join 的 Python 中创建配置文件?

How to create configuration file in Python where need to have os.path.join?

我有几个 Python 模块,例如:

prepare_data.py process_data.py generate_report.py

我获取一个 Excel 文件,对其进行处理,然后创建一个 .pdf 报告。这是非常线性的过程编程。在主 caller.py 模块中,我依次调用函数:

prepare_data.do1() prepare_data.do2() generate_report.do3()

等等

我还有一个 Configuration.py 模块,用于存储在 prepare_data.pyprocess_data.pygenerate_report.py.

中导入的全局变量和设置

但是,在执行过程中,我在存储 Excel 文件的同一文件夹中创建了多个中间文件。在 Configuration.py 中,根据源 Excel 文件的位置创建多个变量非常方便:

excel_file = r"C:\Data\InData.xlsx"
scratch_folder = os.path.dirname(excel_file)
out_pdf = os.path.join(scratch_folder,'PdfReport.pdf')

#scratch_folder is C:\Data

然后在实际执行工作的模块中,我想导入 Configuration.py 然后使用此模块中的变量:

... import Configuration as cfg create_pdf(cfg.out_pdf) ...

但是,当我调用 caller.py 并将 Excel 文件的路径作为参数提供时,我无法将 Excel 文件的路径存储在 Configuration.py 中。

如果我使用像 ConfigParser or just plain .conf file 这样的解决方案,如果我理解正确,我将无法利用 os.path.join() 和其他 Python 函数来构建路径。

在我的特定情况下组织配置的有效方法是什么?

你能创建一个 class 吗?

在Configuration.py中你只需声明一个变量:

foo = None

在您的主程序中,您将声明一个 class,一旦您有 excel_file 路径可用,就创建一个实例:

class ExcelFileClass(object):
    def __init__(self, ef):
        self.scratch_folder = os.path.dirname(ef)
        ...

Configuration.foo = ExcelFileClass(excel_file)

在每个导入配置的模块中,您将能够访问 Configuration.foo.scratch_folder 和其他 class 变量。如果您想对 class 变量进行验证、错误处理或其他操作,您还可以添加一个 get 方法。

汉奴