目录
你甚至需要配置文件吗?
为什么要配置文件?
Microsoft.NET与Python配置文件
入门
先决条件
创建配置文件
启动VS Code并创建一个main.py文件
从硬编码开始
运行代码
生成配置文件的代码
生成的文件
添加/更新/删除配置文件设置
在配置文件中添加/更新设置
删除设置
在Python中读取配置文件
- 从Github下载完整的源代码
如果开发人员在他的项目中有一个模块与FTP服务器连接以下载一些文件,那么开发人员将编写一个通过FTP URL连接到FTP的方法,并使用用户名和密码等凭据来成功连接。如果开发人员在代码中使用这些凭据并将它们硬编码到他们的代码文件中并部署应用程序,它可以正常工作,大功告成!现在,假设两个月后,该FTP站点的密码被更改,开发人员必须再次在您的应用程序中更新该密码,以确保它不会破坏FTP连接的现有功能。现在在这种情况下,开发人员将再次更改代码并重新部署它。在这里,对于小的配置更改,开发人员必须采用最新的代码,进行所需的更改,确保没有其他问题,重新部署应用程序,然后对其进行测试。当某些配置再次更改时,这可能是2~3个月后的重复性任务。如果应用程序有一个配置文件,其键值对为“用户”:“”,“密码”:“密码”,并且每当需要进行一些更改时,只触及该文件并更新配置而不是挖掘进入实际代码。
为什么要配置文件?来自.NET背景,我发现要弄清楚开发人员如何在Python应用程序中拥有一个可用于读取设置值且无需接触代码即可更新或保存的配置文件有点挑战设置。配置文件用于存储键值对或一些可在代码中以及在某个时间点读取或访问的可配置信息。如果该配置发生更改,开发人员只需更改该配置文件中的配置,而不必担心更改代码,因为它可能需要重新编译和部署代码。不仅如此,使用配置文件还可以使您的设置和代码更具可重用性,并将设置信息保存在集中位置并隔离。当然,密码等敏感信息,机密和证书应该更加安全,可能在云保险库中。但是应用程序中使用的基本设置可能是配置文件的一部分。
Microsoft.NET与Python配置文件Microsoft .NET应用程序有时会在您从项目模板开始时默认提供诸如web.config、app.config、appSettings之类的文件,具体取决于您正在创建的应用程序类型。这些文件用于存储设置信息。
默认情况下,Python应用程序不提供设置文件,但是您可以使用现有的并对其进行修改。但最好的方法是从头开始创建自己的并根据需要使用它。
入门在本文中,我们将介绍如何在Python应用程序中创建配置文件、添加配置、更新配置、删除配置以及读取配置。
我们将使用ConfigParser模块来处理配置文件,看看生成和读取配置文件是多么容易。Python可以动态或定期地拥有应用程序所需的所有设置的配置文件。Python配置文件的扩展名为.ini。
我们将使用VS Code (Visual Studio Code)创建一个main方法,该方法使用配置文件读取配置,然后在控制台上打印。对于像我这样刚刚开始使用Python的开发人员来说,这可能是非常新的,所以,我们将从头开始。
先决条件我不会详细介绍安装Python和配置VS Code以运行Python应用程序并假设您拥有它。如果没有,我可以根据请求单独发布一篇关于如何在VS Code中开始使用Python的文章。
创建配置文件 启动VS Code并创建一个main.py文件打开VS Code并创建一个新文件并将其命名为main.py。
编写一个小代码来读取硬编码的值并打印出来。为了便于理解,我首先使用硬编码值进行打印,然后从配置文件中获取这些值。
ftpUrl = "demoftp.codeteddy.com"
userName = "codeteddy"
password = "my#supersecret#password"
print("\nDisplaying FTP details\n")
print("FTP URL: " + ftpUrl)
print("FTP User Name: " + userName)
print("Password: " + password)
现在运行代码以打印详细信息。在角落,应该有一个图标来运行您的代码并在终端上显示输出。
所以,输出是:
Displaying FTP details
FTP URL: demoftp.codeteddy.com
FTP User Name: codeteddy
Password: my#supersecret#password
PS D:\Articles\Python_ConfigFile\Code>
我们的目标是确保输出保持不变,但FTP设置的值是从配置文件中读取的。
生成配置文件的代码在VS Code中,创建一个名为generate_config.py的新文件并导入configparser模块,如下所示:
import configparser
现在将以下代码放入文件中:
import configparser
# CREATE OBJECT
config_file = configparser.ConfigParser()
# ADD SECTION
config_file.add_section("FTPSettings")
# ADD SETTINGS TO SECTION
config_file.set("FTPSettings", "ftpUrl", "demoftp.codeteddy.com")
config_file.set("FTPSettings", "userName", "codeteddy")
config_file.set("FTPSettings", "password", "my#supersecret#password")
# SAVE CONFIG FILE
with open(r"configurations.ini", 'w') as configfileObj:
config_file.write(configfileObj)
configfileObj.flush()
configfileObj.close()
print("Config file 'configurations.ini' created")
# PRINT FILE CONTENT
read_file = open("configurations.ini", "r")
content = read_file.read()
print("Content of the config file are:\n")
print(content)
read_file.flush()
read_file.close()
因此,我们导入包含方法和类的configparser模块,这些方法和类可用于定义我们需要的配置文件的布局。我们创建一个Configparser对象并将其命名为config_file。配置文件可以包含存储详细信息的部分,即FTP设置或记录器设置等。因此,我们创建了一个名为“FTPSettings”的section,并通过将第一个参数作为部分名称的config_file.set方法将键值对添加到该部分,第二个作为键,第三个作为值。在我们的例子中,section名是“FTPSettings”,三个键是ftpUrl,userName和password。
然后我们将定义的布局保存在名为configurations.ini的ini文件中。您可以选择保存设置的文件名。最后,我们正在检索保存的ini文件的内容并在终端窗口或控制台上打印这些内容。
保存此文件并点击运行后,它将生成一个configurations.ini文件。
如果我们打开configurations.ini文件,即新生成的文件,我们会看到以下设置:
[FTPSettings]
ftpurl = demoftp.codeteddy.com
username = codeteddy
password = my#supersecret#password
它包含该FTPSettings部分和我们的FTP设置作为其下的键值对。每次运行generate_config代码时,它都会创建一个新的配置文件,其布局与代码文件中定义的一样。
让我们在文件中再添加一个部分。但这一次,我们将以不同的方式添加它。例如,如果我们需要为Logger添加一个section及其相应的设置,我们也可以使用下面的代码在一个代码语句中完成:
# ADD NEW SECTION AND SETTINGS
config_file["Logger"]={
"LogFilePath":"",
"LogFileName" : "",
"LogLevel" : "Info"
}
现在,generate_config.py与新添加的部分如下所示:
import configparser
# CREATE OBJECT
config_file = configparser.ConfigParser()
# ADD FTPSettings SECTION
config_file.add_section("FTPSettings")
# ADD SETTINGS TO FTPSettings SECTION
config_file.set("FTPSettings", "ftpUrl", "demoftp.codeteddy.com")
config_file.set("FTPSettings", "userName", "codeteddy")
config_file.set("FTPSettings", "password", "my#supersecret#password")
# ADD NEW SECTION AND SETTINGS
config_file["Logger"]={
"LogFilePath":"",
"LogFileName" : "",
"LogLevel" : "Info"
}
# SAVE CONFIG FILE
with open(r"configurations.ini", 'w') as configfileObj:
config_file.write(configfileObj)
configfileObj.flush()
configfileObj.close()
print("Config file 'configurations.ini' created")
# PRINT FILE CONTENT
read_file = open("configurations.ini", "r")
content = read_file.read()
print("Content of the config file are:\n")
print(content)
read_file.flush()
read_file.close()
当我们运行代码时,我们看到我们的配置文件更新了这些新的细节:
[FTPSettings]
ftpurl = demoftp.codeteddy.com
username = codeteddy
password = my#supersecret#password
[Logger]
logfilepath =
logfilename =
loglevel = Info
因此,我们可以使用其中一种方法,即add_section()和set方法或对象初始化器的方式来创建section并添加设置。
我们也可以通过代码添加或更新或删除配置文件中的设置。
在配置文件中添加/更新设置例如,如果我们需要将“loglevel”从“Info”更新为“Debug”,或者我们需要向该Logger部分添加新设置。您可以更新同一generate_config.py文件中的设置并运行它,或者您可以编写代码来读取现有配置文件并更新新设置。例如,我创建了一个名为update_config.py的新Python文件,并向其中添加了以下代码:
import configparser
# CREATE OBJECT
config_file = configparser.ConfigParser()
# READ CONFIG FILE
config_file.read("configurations.ini")
# UPDATE A FIELD VALUE
config_file["Logger"]["LogLevel"]="Debug"
# ADD A NEW FIELD UNDER A SECTION
config_file["Logger"].update({"Format":"(message)"})
# SAVE THE SETTINGS TO THE FILE
with open("configurations.ini","w") as file_object:
config_file.write(file_object)
# DISPLAY UPDATED SAVED SETTINGS
print("Config file 'configurations.ini' is updated")
print("Updated file settings are:\n")
file=open("configurations.ini","r")
settings=file.read()
print(settings)
在这段代码中,我们首先导入,创建configparser对象。 我们读取现有的配置文件,然后将Logger部分的LogLevel设置为“Debug”。同样,我们通过下面的代码通过update方法在Logger部分添加了一个更多的设置:
config_file["Logger"].update({"Format":"(message)"})
此代码在Logger section下添加了一个名为“Format”的新设置,其值为“(message)”。最后,我们再次保存文件,然后再次读取它以显示保存的信息。
现在,当您运行代码时,输出为:
Config file 'configurations.ini' is updated
Updated file settings are:
[FTPSettings]
ftpurl = demoftp.codeteddy.com
username = codeteddy
password = my#supersecret#password
[Logger]
logfilepath =
logfilename =
loglevel = Debug
format = (message)
因此,这些是您可以更新ini文件的方法。
删除设置我们可以使用configparser模块中的remove_option()和remove_section()模块从配置文件中删除设置。remove_option()用于从任何section中删除一个字段(即键值对),remove_section()用于删除配置文件中的一个完整的section。
# DELETE A FIELD IN THE SECTION
config_file.remove_option('Logger', 'Format')
# DELETE A SECTION
config_file.remove_section('Logger')
现在文件已创建,我们已经学习了如何在需要时生成和更新配置文件。让我们访问本文的最后一部分,即从我们的主类中的配置文件中读取值。这是最简单直接的部分。
让我们让它有点组织和可重用。让我们在VS Code工作区中添加一个帮助文件并将其命名为helper.py并向其中添加以下代码:
import configparser
# Method to read config file settings
def read_config():
config = configparser.ConfigParser()
config.read('configurations.ini')
return config
现在,这个辅助方法代码将在我们需要配置的任何地方用作可重用的方法。
现在,转到main.py文件并将这个帮助文件导入为:
现在,在main.py中,将硬编码的部分替换为从配置文件中读取设置:
import helper
config = helper.read_config()
ftpUrl = config['FTPSettings']['ftpUrl']
userName = config['FTPSettings']['userName']
password = config['FTPSettings']['password']
print("\nDisplaying FTP details\n")
print("FTP URL: " + ftpUrl)
print("FTP User Name: " + userName)
print("Password: " + password)
并运行代码。我们将看到我们的输出与从硬编码代码中读取值时的输出相同。
现在它从配置文件中读取。
https://www.codeproject.com/Articles/5319621/Configuration-Files-in-Python