【问题标题】:Python config file for script脚本的 Python 配置文件
【发布时间】:2017-05-13 08:59:50
【问题描述】:

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

【问题讨论】:

    标签: python linux python-2.7


    【解决方案1】:

    您似乎正在尝试import 配置文件。但你不能这样做:import 用于导入 Python 模块,所以你导入的文件应该是有效的 Python,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
    

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

    with open("./testconf") as configs:
        for config in configs:
            if config.startswith("#"):
                continue
            keyword, value = config.split("=")
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我知道,但我正在寻找解决方法,因为 conf 文件的语法必须保持这种方式,没有引号
      【解决方案3】:

      将其更改为以下内容:

      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'}
      >>> 
      

      【讨论】:

        【解决方案4】:

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

        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'}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-14
          • 2019-02-25
          相关资源
          最近更新 更多