検索
ホームページバックエンド開発Python チュートリアル超完成度! Python で構成ファイルを記述する一般的な方法

超完成度! Python で構成ファイルを記述する一般的な方法

構成ファイルを記述する理由

この修正ファイルは、settings.py や config.py などの .py ファイルに直接書き込むことができます。同じプロジェクト内にある場合は、インポートを通じてその一部を直接インポートできますが、他の非 Python プラットフォームで構成ファイルを共有する必要がある場合、単一の .py を記述するのは良い選択ではありません。現時点では、これらの固定部分を保存するために共通の構成ファイルの種類を選択する必要があります。現在、一般的に使用されている一般的な構成ファイル形式のタイプには、主に ini、json、toml、yaml、xml などが含まれます。これらのタイプの構成ファイルは、標準ライブラリまたはサードパーティ ライブラリを通じて解析できます。

ini

ini とは Initialize の意味で、初期の頃は Windows 上の設定ファイルの保存形式でした。 ini ファイルの記述方法は理解しやすく、比較的単純なことが多く、通常は次のようなセクション、キー、値で構成されます:

[localdb]
host = 127.0.0.1
user = root
password = 123456
port = 3306
database = mysql

Python 独自の組み込み configparser 標準ライブラリを直接使用できます。 ini ファイルを解析するために使用します。たとえば、上記のコンテンツを db.ini という名前のファイルに保存し、次に read() メソッドを使用して解析および読み取りを行い、最後に items() メソッドを使用して指定されたノードの下にあるすべてのキーと値のペアを取得します。

>>> from configparser import ConfigParser
>>> cfg = ConfigParser()
>>> cfg.read("/Users/Bobot/db.ini")
['/Users/Bobot/db.ini']
>>> cfg.items("localdb")
[('host', '127.0.0.1'), ('user', 'root'), ('password', '123456'), ('port', '3306'), ('database', 'mysql')]

configparser はデフォルトで値を文字列の形式で提示することに注意してください。そのため、db.ini ファイルに引用符を追加せず、上記のリテラルを直接記述します。

キーと値のペアを取得した後、実際にそれを辞書に直接変換し、コードを単純にするためにパラメーターを解凍しました。

#!pip install pymysql
import pymysql
from configparser import ConfigParser
cfg = ConfigParser()
cfg.read("/Users/Bobot/db.ini")
db_cfg = dict(cfg.items("localdb"))
con = pymysql.connect(**db_cfg)

json

json形式は私たちにとって一般的なファイル形式と言え、インターネット上でよく使われるデータ交換形式でもあります。さらに、json は設定ファイルの一種である場合もあります。

たとえば、npm (Python の pip に似た JavaScript パッケージ管理ツール) と、広く使用されている Microsoft 製の VSCode エディターはすべて、json を使用して構成パラメーターを記述します。

configparser と同様に、Python にも組み込みの json 標準ライブラリがあり、load() メソッドとloads() メソッドを通じてファイルと文字列の json コンテンツをインポートできます。

{
 "localdb":{
 "host": "127.0.0.1",
 "user": "root",
 "password": "123456",
 "port": 3306,
 "database": "mysql"
 }
}

上記の内容を db.json として保存し、読み取って解析します。json ライブラリが json ファイルを読み込むのは比較的シンプルで簡単で、Python 辞書オブジェクトに解析するのも簡単です。

>>> import json
>>> from pprint import pprint
>>>
>>> with open('/Users/Bobot/db.json') as j:
... cfg = json.load(j)['localdb']
...
>>> pprint(cfg)
{'database': 'mysql',
'host': '127.0.0.1',
'password': '123456',
'port': 3306,
'user': 'root'}

json ファイル構成を使用する欠点は、構文標準が厳しく制限されていることです。批判の 1 つは、json タイプの他のスーパーセットが代替として使用されない限り、コメントを書き込むことができないことです (コメントは可能です) VSCode の json パラメータ設定ファイルに書き込むことも代替案の 1 つです); 同時に、ネストが深すぎるという問題があり、簡単にエラーが発生する可能性があるため、長くて複雑なパラメータ設定情報を書き込むのには使用しないでください。

toml

toml 形式 (または tml 形式) は、Github の共同創設者 Tom Preston-Werner によって提案された構成ファイル形式です。 Wikipedia によると、toml は 7 年前の 2013 年 7 月に最初に提案されました。また、いくつかの点で後で説明する yaml ファイルに似ていますが、yaml の仕様を知っていれば、仕様が数十ページにも及ぶ場合 (そうです、それは本当に数十ページあります...)、実際にはそのような複雑な設定ファイルを書きたくないかもしれないので、toml 形式が良い選択です。

toml の形式はおおよそ次のとおりです。

超完成度! Python で構成ファイルを記述する一般的な方法

ここから、toml が前述の ini ファイルに似ていることがわかります。しかし、それはiniよりもはるかに拡張されます。

サンプル画像では、基本的な文字列に加えて、タイムスタンプ、ブール値、配列などがさらにサポートされており、そのスタイルが Python のネイティブの記述に非常に似ていることがわかります。

もちろん、toml 形式の仕様についてはここではあまり紹介しませんが、公式の仕様書は既に翻訳されている方がいますので、興味のある方は直接確認してみてください。

開発者は、Python メソッドに適合する構成ファイル タイプに対応する「ホイール」を作成しました。現在、Github では uiri/toml バージョンに最も多くの星が付いていますが、このバージョンは v0.5 バージョンの toml 仕様にのみ合格しています。 pip コマンド

pip install toml

を使用してインストールできます。このライブラリの解析方法は非常に単純で、json ライブラリの解析方法と似ています。解析にはload()またはloads()を使用し、同様に変換とエクスポートも同様に使用されます。

たとえば、次のコンテンツを config.toml に書き込みます:

[mysql]
host = "127.0.0.1"
user = "root"
port = 3306
database = "test"
 [mysql.parameters]
 pool_size = 5
 charset = "utf8"
 [mysql.fields]
 pandas_cols = [ "id", "name", "age", "date"]

その後、Toml ライブラリのload() メソッドを通じてそれを読み取ることができます:

>>> import toml
>>> import os
>>> from pprint import pprint
>>> cfg = toml.load(os.path.expanduser("~/Desktop/config.toml"))
>>> pprint(cfg)
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameters': {'charset': 'utf8', 'pool_size': 5},
'port': 3306,
'user': 'root'}}

toml ファイルが間接的に辞書型に変換されていることがわかります。もちろん、これは json バージョンの記述方法 (一重引用符を二重引用符に置き換えるだけです) であり、これにより後続の呼び出しやパラメーター転送が容易になります。

yaml

yaml 格式(或 yml 格式)是目前较为流行的一种配置文件,它早在 2001 由一个名为 Clark Evans 的人提出;同时它也是目前被广泛使用的配置文件类型,典型的就是 Docker 容器里的 docker-compose.yml 配置文件,如果经常使用 Docker 进行部署的人对此不会陌生。

yaml 文件的设计从 Python、XML 等地方获取灵感,所以在使用时能很清楚地看到这些部分的影子。

在上一节 toml 内容里我曾提到,yaml 的规范内容可以说是冗长和复杂,足足有80页之多。

超完成度! Python で構成ファイルを記述する一般的な方法

所以感兴趣的朋友可以再自行了解相关用法。

YAML 官方早已经提供了相应的 Python 库进行支持,即 PyYAML;当然也同样需要我们事先进行安装:

pip install pyyaml

同 json 库和 toml 库一样,通过 load() 方法来进行加载。

需要注意的是,使用 load() 方法会存在一定的安全隐患,从思科 Talos 的这份报告中我们可以看到,如果加载了未知或不信任的 yaml 文件,那么有可能会存在被攻击的风险和网络安全隐患,因为它能够直接调用相应的 Python 函数来执行为攻击者所需要的命令,比如说在 yaml 文件中写入这么一段:

# 使用Linux和macOS的朋友不要轻易尝试
!!python/object/apply:os.system ["rm -rf /"]

因此最好是使用 safe_load() 来代替 load() 方法。

这和 Python 内置的 string 标准库中 Template 类的 substitute() 模板方法一样存在着同样的安全隐患,所以使用 safe_substitute() 来替代是一样的道理。

如我们现在将之前的一些配置信息写入 config.yaml 文件中:

mysql:
 host: "127.0.0.1"
 port: 3306
 user: "root"
 password: "123456"
 database: "test"
 parameter:
 pool_size: 5
 charset: "utf8"
 fields:
pandas_cols:
 - id
 - name
 - age
 - date

然后我们通过 safe_load() 方法进行解析:

>>> import os
>>> from pprint import pprint
>>>
>>> with open(os.path.expanduser("~/config.yaml"), "r") as config:
... cfg = yaml.safe_load(config)
...
>>> pprint(cfg)
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameter': {'charset': 'utf8', 'pool_size': 5},
'password': '123456',
'port': 3306,
'user': 'root'}}

可以看到最后结果和前面的 toml 库的解析结果基本一致。

结尾

本文列举了一些主流且常见的配置文件类型及其 Python 的读取方法,可能有的读者会发现当中没有 xml 格式类型的内容。对于 xml 配置文件可能与 Java 系语言打交道的朋友遇见得会多一些,但 xml 文件的可读性实在是让人望而生畏;对 xml 文件不了解的朋友可以使用 Chrome 浏览器随便进入一个网站然后按下 F12 进入开发者后查看那密密麻麻的 html 元素便是 .xml 的缩影。

除了这些主流的配置文件类型之外,像一些 .cfg、.properties 等都可以作为配置文件,甚至和开头提到的那样,你单独用一个 .py 文件来书写各类配置信息作为配置文件进行导入都是没问题,只是在跨语言共享时可能会有些障碍。因此本文就不过多介绍,感兴趣的朋友可以进一步自行了解。

在本文里列举的配置文件类型其复杂性由上到下依次增加:ini

以上が超完成度! Python で構成ファイルを記述する一般的な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonと時間:勉強時間を最大限に活用するPythonと時間:勉強時間を最大限に活用するApr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター