我从文件中读取配置文件时遇到问题。 它看起来非常基本,但因为我是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
答案 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'}
>>>