Python ConfigParser

时间:2020-02-23 14:42:33  来源:igfitidea点击:

Python ConfigParser

在创建可配置应用程序时,Python ConfigParser模块是一个非常重要的模块。

为了提供一个简短的摘要,使用configparser模块,我们可以将与我们的应用程序相关的配置保存在系统中任何位置的配置文件中,并在我们的应用程序内部进行访问。

因此,如果假设我们将数据库连接详细信息保留在config文件中,则只需更改它们以使我们的应用程序指向一个全新的数据库即可。
这意味着我们无需在应用程序中进行任何更改即可!

配置文件可以包括什么?

我们创建的配置文件可以包含整数,浮点值和布尔值。
具体来说,以下是要点:

  • 可以通过以[开头和]结尾的行来标识配置文件部分。
    我们可以在方括号之间放置该部分的名称,该名称可以是方括号本身以外的任何字符。

  • 以";"或者"#"开头的行被视为注释,无法以编程方式使用。

The values are separated by a =or a :.

让我们看一个示例配置文件,它可以很好地清除所有内容。

# A comment which can contain anything.
[database_config]
url = https://localhost:3306/mysql/
username = root
; Consider hashing this password rather than
; keeping it as plain-text here
password = MY_PASSWORD

瞧,那有多容易!可以在上述文件中以编程方式使用的值为url,用户名和密码。

Python配置文件

让我们将这些概念与一些代码片段一起使用。

使用配置文件

我们将创建一个示例配置文件,如下所示:

# A comment which can contain anything.
[database_config]
url = https://localhost:3306/mysql/
username = root
; Consider hashing this password rather than
; keeping it as plain-text here
password = MY_PASSWORD

制作该文件并将其命名为" database.config",并将其保存在与我们接下来编写的程序相同的目录中:

from configparser import ConfigParser

parser = ConfigParser()
parser.read('database.config')

print(parser.get('database_config', 'url'))

其中我们首先找到该部分,然后继续提供所需的确切密钥。
就代码可读性而言,这甚至是很好的。
让我们看一下该程序的输出:

实际上,这非常简单。

检查配置文件是否存在

在程序中使用键值之前,最好先检查一下配置文件是否存在。
这样,我们可以在我们的应用程序中集成一个更好的错误机制,并且也许在配置文件丢失时通知用户。

让我们看一下代码片段:

from configparser import ConfigParser
import glob

config_parser = ConfigParser()

files_to_find = ['database.config', 'does-not-exist.config']

found_files = config_parser.read(files_to_find)
missing_files = set(files_to_find) - set(found_files)

print('Found config files:  ', sorted(found_files))
print('Missing files     :  ', sorted(missing_files))

遍历所有存在的值

我们可以遍历配置文件中存在的所有部分和值以查找特定值或者执行任何其他操作。

让我们看一下如何做到这一点的代码片段:

from configparser import ConfigParser

config_parser = ConfigParser()
config_parser.read('database.config')

for section_name in config_parser.sections():
  print('Section:', section_name)
  print('  Options:', config_parser.options(section_name))
  for key, value in config_parser.items(section_name):
      print('  {} = {}'.format(key, value))
  print()

检查部分是否存在

如果我们只提供一个区号并检查该区是否存在,那会更好吗?实际上是有可能的,这就是我们将在下一个代码段中执行的操作:

from configparser import ConfigParser

config_parser = ConfigParser()
config_parser.read('database.configdatabase.config')

for key in ['url', 'cluster-address', 'database_config']:
  print('{:<12}: {}&#039;.format(key, config_parser.has_section(key)))

检查是否存在值

现在,让我们直接检查该值是否存在。
让我们看一下如何做到这一点的代码片段:

from configparser import ConfigParser

config_parser = ConfigParser()
config_parser.read('database.config')

find_sections = ['cluster-address', 'database_config']
find_options = ['url', 'some-option']

for section in find_sections:
  has_section = config_parser.has_section(section)
  print('{} section exists: {}'.format(section, has_section))
  for key in find_options:
      has_option = config_parser.has_option(section, key)
      print('{}.{:<12}  : {}&#039;.format(section, key, has_option))
  print()