構(gòu)成ファイルを記述する理由
開発プロセスでは、固定パラメーターまたは定數(shù)を使用することがよくあります。これらのより固定された一般的に使用される部分については、さまざまなモジュール コードでの繰り返しを避け、コア コードをクリーンに保つために、多くの場合、固定ファイルに書き込まれます。
この修正されたファイルを、settings.py や config.py などの .py ファイルに直接書き込むことができます。この利點は、同じプロジェクト內(nèi)のインポートを通じてその一部を直接インポートできることです。必要に応じて Python 以外の他のプラットフォームで構(gòu)成ファイルを共有する場合、単一の .py を記述するのは良い選択ではありません。
現(xiàn)時點では、これらの固定部分を保存するために共通の構(gòu)成ファイルの種類を選択する必要があります?,F(xiàn)在、一般的に使用されている一般的な構(gòu)成ファイル形式のタイプには、主に ini、json、toml、yaml、xml などが含まれます。これらのタイプの構(gòu)成ファイルは、標準ライブラリまたはサードパーティ ライブラリを通じて解析できます。
ini
ini とは Initialize の意味で、初期の頃は Windows 上の設(shè)定ファイルの保存形式でした。 ini ファイルの記述方法は理解しやすく、比較的単純なことが多く、通常は次のようなセクション、キー、値で構(gòu)成されます:
[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 は設(shè)定ファイルの一種である場合もあります。
たとえば、npm (Python の pip に似た JavaScript パッケージ管理ツール) と、広く使用されている Microsoft 製の VSCode エディターはすべて、json を使用して構(gòu)成パラメーターを記述します。
configparser と同様に、Python にも組み込みの json 標準ライブラリがあり、load() メソッドとloads() メソッドを通じてファイルと文字列の json コンテンツをインポートできます。
{ "localdb":{ "host": "127.0.0.1", "user": "root", "password": "123456", "port": 3306, "database": "mysql" } }
上記の內(nèi)容を 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 ファイル構(gòu)成を使用する欠點は、構(gòu)文標準が厳しく制限されていることです。批判の 1 つは、json タイプの他のスーパーセットが代替として使用されない限り、コメントを書き込むことができないことです (コメントは可能です) VSCode の json パラメータ設(shè)定ファイルに書き込むことも代替案の 1 つです); 同時に、ネストが深すぎるという問題があり、簡単にエラーが発生する可能性があるため、長くて複雑なパラメータ設(shè)定情報を書き込むのには使用しないでください。
toml
toml 形式 (または tml 形式) は、Github の共同創(chuàng)設(shè)者 Tom Preston-Werner によって提案された構(gòu)成ファイル形式です。 Wikipedia によると、toml は 7 年前の 2013 年 7 月に最初に提案されました。また、いくつかの點で後で説明する yaml ファイルに似ていますが、yaml の仕様を知っていれば、仕様が數(shù)十ページにも及ぶ場合 (そうです、それは本當に數(shù)十ページあります...)、実際にはそのような複雑な設(shè)定ファイルを書きたくないかもしれないので、toml 形式が良い選択です。
toml の形式は大まかに次のとおりです。
01-toml style
ここから、toml がある程度の形式であることがわかります。前述の ini ドキュメントに似ています。しかし、それはiniよりもはるかに拡張されます。
サンプル畫像では、基本的な文字列に加えて、タイムスタンプ、ブール値、配列などがさらにサポートされており、そのスタイルが Python のネイティブの記述に非常に似ていることがわかります。
もちろん、toml 形式の仕様についてはここではあまり紹介しませんが、公式の仕様書は既に翻訳されている方がいますので、興味のある方は直接確認してみてください。
開発者は、Python メソッドに適合する構(gòu)成ファイル タイプに対応する「ホイール」を作成しました?,F(xiàn)在、Github では uiri/toml バージョンに最も多くの星が付いていますが、このバージョンは v0.5 バージョンの toml 仕様にのみ合格しています。 pip コマンド
pip install toml
を使用してインストールできます。このライブラリの解析方法は非常に単純で、json ライブラリの解析方法と似ています。解析にはload()またはloads()を使用し、同様に変換とエクスポートも同様に使用されます。
たとえば、次の內(nèi)容を 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() 方法來進行讀?。?/p>
>>> 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 文件被間接地轉(zhuǎn)化成了字典類型,當然這也就是 json 版的寫法(將單引號替換成雙引號即可),方便我們后續(xù)調(diào)用或者傳參。
yaml
yaml 格式(或 yml 格式)是目前較為流行的一種配置文件,它早在 2001 由一個名為 Clark Evans 的人提出;同時它也是目前被廣泛使用的配置文件類型,典型的就是 Docker 容器里的 docker-compose.yml 配置文件,如果經(jīng)常使用 Docker 進行部署的人對此不會陌生。
yaml 文件的設(shè)計從 Python、XML 等地方獲取靈感,所以在使用時能很清楚地看到這些部分的影子。
在上一節(jié) toml 內(nèi)容里我曾提到,yaml 的規(guī)范內(nèi)容可以說是冗長和復雜,足足有80頁之多(斗尊強者,恐怖如斯……)。
02-yaml規(guī)范頁數(shù)
所以感興趣的朋友可以再自行了解相關(guān)用法。
YAML 官方早已經(jīng)提供了相應的 Python 庫進行支持,即 PyYAML;當然也同樣需要我們事先進行安裝:
pip install pyyaml
同 json 庫和 toml 庫一樣,通過 load() 方法來進行加載。
需要注意的是,使用 load() 方法會存在一定的安全隱患,從思科 Talos 的這份報告中我們可以看到,如果加載了未知或不信任的 yaml 文件,那么有可能會存在被攻擊的風險和網(wǎng)絡安全隱患,因為它能夠直接調(diào)用相應的 Python 函數(shù)來執(zhí)行為攻擊者所需要的命令,比如說在 yaml 文件中寫入這么一段:
# 使用Linux和macOS的朋友不要輕易嘗試 !!python/object/apply:os.system ["rm -rf /"]
因此最好是使用 safe_load() 來代替 load() 方法。
這和 Python 內(nèi)置的 string 標準庫中 Template 類的 substitute() 模板方法一樣存在著同樣的安全隱患,所以使用 safe_substitute() 來替代是一樣的道理。
如我們現(xiàn)在將之前的一些配置信息寫入 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'}}
可以看到最后結(jié)果和前面的 toml 庫的解析結(jié)果基本一致。
結(jié)尾
本文列舉了一些主流且常見的配置文件類型及其 Python 的讀取方法,可能有的讀者會發(fā)現(xiàn)當中沒有 xml 格式類型的內(nèi)容。對于 xml 配置文件可能與 Java 系語言打交道的朋友遇見得會多一些,但 xml 文件的可讀性實在是讓人望而生畏;對 xml 文件不了解的朋友可以使用 Chrome 瀏覽器隨便進入一個網(wǎng)站然后按下 F12 進入開發(fā)者后查看那密密麻麻的 html 元素便是 .xml 的縮影。
除了這些主流的配置文件類型之外,像一些 .cfg、.properties 等都可以作為配置文件,甚至和開頭提到的那樣,你單獨用一個 .py 文件來書寫各類配置信息作為配置文件進行導入都是沒問題,只是在跨語言共享時可能會有些障礙。因此本文就不過多介紹,感興趣的朋友可以進一步自行了解。
在本文里列舉的配置文件類型其復雜性由上到下依次增加:ini
以上が超完成度! Python で構(gòu)成ファイルを記述する一般的な方法の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ユーザー音聲入力がキャプチャされ、フロントエンドJavaScriptのMediareCorder APIを介してPHPバックエンドに送信されます。 2。PHPはオーディオを一時ファイルとして保存し、STTAPI(GoogleやBaiduの音聲認識など)を呼び出してテキストに変換します。 3。PHPは、テキストをAIサービス(Openaigptなど)に送信して、インテリジェントな返信を取得します。 4。PHPは、TTSAPI(BaiduやGoogle Voice Synthesisなど)を呼び出して音聲ファイルに返信します。 5。PHPは、音聲ファイルをフロントエンドに戻し、相互作用を完了します。プロセス全體は、すべてのリンク間のシームレスな接続を確保するためにPHPによって支配されています。

AIによるテキストエラーの修正と構(gòu)文最適化を?qū)g現(xiàn)するには、次の手順に従う必要があります。1。Baidu、Tencent API、またはオープンソースNLPライブラリなどの適切なAIモデルまたはAPIを選択します。 2。PHPのカールまたはガズルを介してAPIを呼び出し、返品結(jié)果を処理します。 3.アプリケーションにエラー修正情報を表示し、ユーザーが採用するかどうかを選択できるようにします。 4.構(gòu)文の検出とコードの最適化には、PHP-LとPHP_CODESNIFFERを使用します。 5.フィードバックを継続的に収集し、モデルまたはルールを更新して効果を改善します。 AIAPIを選択するときは、PHPの精度、応答速度、価格、サポートの評価に焦點を當てます。コードの最適化は、PSR仕様に従い、キャッシュを合理的に使用し、円形クエリを避け、定期的にコードを確認し、Xを使用する必要があります。

Seabornのジョイントプロットを使用して、2つの変數(shù)間の関係と分布をすばやく視覚化します。 2?;镜膜噬⒉紘恧?、sns.jointplot(data = tips、x = "total_bill"、y = "tip"、dind = "scatter")によって実裝され、中心は散布図であり、ヒストグラムは上部と右側(cè)と右側(cè)に表示されます。 3.回帰線と密度情報をdind = "reg"に追加し、marminal_kwsを組み合わせてエッジプロットスタイルを設(shè)定します。 4。データ量が大きい場合は、「ヘックス」を使用することをお勧めします。

文字列リストは、 '' .join(words)などのJoIn()メソッドとマージして、「Helloworldfrompython」を取得できます。 2。NUMBERリストは、參加する前にMAP(STR、數(shù)字)または[STR(x)forxinNumbers]を備えた文字列に変換する必要があります。 3.任意のタイプリストは、デバッグに適したブラケットと引用符のある文字列に直接変換できます。 4。カスタム形式は、 '|' .join(f "[{item}]" foriteminitems)output "[a] | [などのjoin()と組み合わせたジェネレーター式によって実裝できます。

Pyodbcのインストール:Pipinstallpyodbcコマンドを使用してライブラリをインストールします。 2.接続sqlserver:pyodbc.connect()メソッドを介して、ドライバー、サーバー、データベース、uid/pwdまたはtrusted_connectionを含む接続文字列を使用し、それぞれSQL認証またはWindows認証をサポートします。 3.インストールされているドライバーを確認します:pyodbc.drivers()を?qū)g行し、「sqlserver」を含むドライバー名をフィルタリングして、「sqlserverのodbcdriver17」などの正しいドライバー名が使用されるようにします。 4.接続文字列の重要なパラメーター

pandas.melt()は、幅広い形式データを長い形式に変換するために使用されます。答えは、ID_VARSを識別列を保持し、value_varsを溶かしてvar_nameおよびvalue_nameを選択する列を選択して、新しい列名を定義することです。列は1.id_vars = 'name'を意味します。 4.Value_Name = 'スコア'元の値の新しい列名を設(shè)定し、最後に名前、件名、スコアを含む3つの列を生成します。

Pythoncanbeoptimizedformemory-boundoperationsは、ヘッドゲネレーター、EfficientDataStructures、およびManagingObjectlifetimes.first、Usegeneratoratoratoratoratoratoraturatussを使用していることを確認してください

まず、名前、メールボックス、メッセージフィールドを含む連絡先フォームを定義します。 2。ビューでは、フォームの送信はPOSTリクエストを?qū)彇摔工毪长趣摔瑜陝I理され、検証が渡された後、Cleaned_Dataが取得され、応答が返されます。 3。テンプレートでは、{{form.as_p}}を使用してフィールドをレンダリングし、{%csrf_token%}を追加してCSRF攻撃を防ぎます。 4. contact_viewビューにポイント /連絡先 /にURLルーティングを構(gòu)成します。 Modelformを使用してモデルを直接関連付けてデータストレージを?qū)g現(xiàn)します。 Djangoformsは、データ検証、HTMLレンダリング、エラープロンプトの統(tǒng)合処理を?qū)g裝します。これは、安全な形式機能の迅速な発展に適しています。
