用于脚本的Python配置文件

时间:2017-05-13 08:59:51

标签: python linux python-2.7

我从文件中读取配置文件时遇到问题。 它看起来非常基本,但因为我是python的新手,因为我错过了一些东西。

配置文件如下所示

CCWD_HOME=/batch/ccwd
#Temporary location for daemon job listing
CCWD_TEMP=/tmp
#Directory for job definitions
CCWD_PROD=/batch/PRD

问题是这个文件的语法必须保持这种状态。 将字符串分配给变量需要配额标记("")。 有没有简单的方法从配置文件中读取变量如上所述? 例如我有脚本

#!/bin/python
import conf
print CCWD_TEMP

得到了这个错误

Traceback (most recent call last):
  File "./testconf", line 2, in <module>
    import conf
  File "/app/test/conf.py", line 6
    CCWD_HOME=/batch/ccwd
              ^
SyntaxError: invalid syntax

4 个答案:

答案 0 :(得分:1)

看起来您正在尝试Test配置文件。但是你不能这样做:import用于导入Python模块,因此你导入的文件应该是有效的Python,import不是。这就是语法错误的含义。

您可以使用模块CCWD_HOME=/batch/ccwd来读取文件,但它需要将设置分组到方括号中的部分名称标题部分,如下所示:

configparser

如果您无法更改配置文件,则必须自行解析。

[MyStuff]
CCWD_HOME=/batch/ccwd
#Temporary location for daemon job listing
CCWD_TEMP=/tmp
#Directory for job definitions
CCWD_PROD=/batch/PRD

答案 1 :(得分:0)

您正在尝试将您的conf文件作为python脚本执行。相反,最好编写一个简单的配置文件解析器,并将所有配置值导入到这样的dict中:

conf = {} 
with open(r"PathToFile", "r") as f:
    for confline in f.readlines():
        if "=" in confline:
            conf[confline.partition("=")[0]] = confline.partition("=")[2]

输出

print(conf)
{'CCWD_PROD': '/batch/PRD', 'CCWD_HOME': '/batch/ccwd\n', 'CCWD_TEMP': '/tmp\n'}

答案 2 :(得分:0)

目录需要是字符串。您可以通过不将配置文件作为模块导入,但将文件作为文本文件打开(例如通过numpys loadtxt())来实现。之后,您可以通过仔细扫描线条来读出目录。

答案 3 :(得分:0)

将其更改为以下内容:

CCWD_HOME="/batch/ccwd"
#Temporary location for daemon job listing
CCWD_TEMP="/tmp"
#Directory for job definitions
CCWD_PROD="/batch/PRD"

由于你已经使conf.py成为python文件,因此必须遵守python标准。因此,它必须采用上述格式

如果你想让它只是这样,那么你必须以差异的方式使用它。而不是导入它,将其作为文件读取,提取内容,然后执行所需的操作。以下是代码:

>>> with open("a.txt") as f:
...     content = f.readlines()
... 
>>>
# you may also want to remove whitespace characters like `\n` at the end of each line
>>> content = dict(x.split("=") for x in content if "=" in x)
>>> content
{'CCWD_PROD': '/batch/PRDw\n', 'CWD_HOME': '/batch/ccwd\n', 'CCWD_TEMP': '/tmp\n'}
>>>