你甚至需要配置文件吗?
如果开发人员在他的项目中有一个模块与 FTP 服务器连接以下载一些文件,那么开发人员将编写一个通过 FTP URL 连接到 FTP 的方法,并使用用户名和密码等凭据来成功连接。如果开发人员在代码中使用这些凭据并将它们硬编码到他们的代码文件中并部署应用程序,它可以正常工作,大功告成!现在,假设两个月后,该 FTP 站点的密码被更改,开发人员必须再次在您的应用程序中更新该密码,以确保它不会破坏 FTP 连接的现有功能。现在在这种情况下,开发人员将再次更改代码并重新部署它。在这里,对于小的配置更改,开发人员必须采用最新的代码,进行所需的更改,确保没有其他问题,重新部署应用程序,然后对其进行测试。当某些配置再次更改时,这可能是 2~3 个月后的重复性任务。如果应用程序有一个配置文件,其键值对为“用户”:“<用户名>”,“密码”:“密码”,并且每当需要进行一些更改时,只触及该文件并更新配置而不是挖掘进入实际代码。
为什么要配置文件?
来自 .NET 背景,我发现要弄清楚开发人员如何在 Python 应用程序中拥有一个可用于读取设置值且无需触摸代码即可更新或保存的配置文件有点挑战设置。配置文件用于存储键值对或一些可在代码中以及在某个时间点读取或访问的可配置信息。如果该配置发生更改,开发人员只需更改该配置文件中的配置,而不必担心更改代码,因为它可能需要重新编译和部署代码。不仅如此,使用配置文件还可以使您的设置和代码更具可重用性,并将设置信息保存在集中位置并隔离。当然,密码等敏感信息,机密和证书应该更加安全,可能在云保险库中。但是应用程序中使用的基本设置可能是配置文件的一部分。
Microsoft.NET 与 Python 配置文件
Microsoft .NET 应用程序有时会在您从项目模板开始时默认提供诸如web.config、app.configappSettings
之类的文件,具体取决于您正在创建的应用程序类型。这些文件用于存储设置信息。
默认情况下,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
将键值对添加到该部分config_file.set
,第二个作为键,第三个作为值。在我们的例子中,节名是“ 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
运行代码时,它都会创建一个新的配置文件,其布局与代码文件中定义的一样。
让我们在文件中再添加一个部分。但这一次,我们将以不同的方式添加它。例如,如果我们需要添加一个部分 forLogger
及其对应的设置,我们也可以使用以下代码在单个代码语句中执行此操作:
# ADD NEW SECTION AND SETTINGS config_file["Logger"]={ "LogFilePath":"<Path to log file>", "LogFileName" : "<Name of log file>", "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":"<Path to log file>", "LogFileName" : "<Name of log file>", "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 = <Path to log file> logfilename = <Name of log file> loglevel = Info
add_section()
因此,我们可以使用任何一种方式,即set
方法或对象初始化方式来创建节并为其添加设置。
添加/更新/删除配置文件设置
我们也可以通过代码添加或更新或删除配置文件中的设置。
在配置文件中添加/更新设置
例如,如果我们需要将“ 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
. 我们读取现有的配置文件,然后将LogLevel
fromLogger
部分设置为“ Debug
”。同样,我们通过此代码在Logger
via 方法部分下添加了一个设置:update
config_file["Logger"].update({"Format":"(message)"})
此代码在 section 下添加了一个名为“ Format
”的新设置,其值为“ (message)
” Logger
。最后,我们再次保存文件,然后再次读取它以显示保存的信息。
现在,当您运行代码时,输出为:
Config file 'configurations.ini' is updated Updated file settings are: [FTPSettings] ftpurl = demoftp.codeteddy.com username = codeteddy password = my#supersecret#password [Logger] logfilepath = <Path to log file> logfilename = <Name of log file> loglevel = Debug format = (message)

因此,这些是您可以更新 ini 文件的方法。
删除设置
我们可以使用模块中的remove_option()
模块从配置文件中删除设置。用于从任何部分删除字段(即键值对),并用于删除配置文件的完整部分。remove_section()
configparser
remove_option()
remove_section()
# DELETE A FIELD IN THE SECTION config_file.remove_option('Logger', 'Format') # DELETE A SECTION config_file.remove_section('Logger')
在 Python 中读取配置文件
现在文件已创建,我们已经学习了如何在需要时生成和更新配置文件。让我们访问本文的最后一部分,即从我们的主类中的配置文件中读取值。这是最简单直接的部分。
让我们让它有点组织和可重用。让我们在 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)
并运行代码。我们将看到我们的输出与从硬编码代码中读取值时的输出相同。

现在它从配置文件中读取。