ホームページ > バックエンド開発 > Python チュートリアル > Python サーバー プログラミング: PyYAML を使用した YAML 形式の解析

Python サーバー プログラミング: PyYAML を使用した YAML 形式の解析

WBOY
リリース: 2023-06-19 10:33:10
オリジナル
1856 人が閲覧しました

Python サーバー プログラミング: YAML 形式の解析に PyYAML を使用する

インターネット テクノロジーの急速な発展に伴い、サーバー プログラミングの重要性がますます高まっています。強力なプログラミング言語として、Python は開発者の間でますます人気が高まっています。 PyYAML は、Python で最も一般的に使用される YAML 形式パーサーの 1 つです。この記事では、開発者が Python サーバーをより適切にプログラムできるように、PyYAML を使用して YAML 形式を解析する方法を紹介します。

YAML とは何ですか?

YAML (Yet Another Markup Language) は軽量なデータ交換形式で、XML や JSON などのデータ形式と比較して読み書きが容易な形式です。 YAML 形式のデータはシリアル化され、人間が読み取って理解することができます。 YAML はもともと、XML が煩雑で読みにくいという問題を解決するために開発されました。

YAML 形式の例:

- name: Alice
  age: 25
  occupation: programmer
- name: Bob
  age: 30
  occupation: designer
ログイン後にコピー

PyYAML を使用した YAML 形式の解析

PyYAML は、Python で最も一般的に使用される YAML 形式パーサーの 1 つです。これは、YAML 1.1 および 1.2 のすべてのコア機能をサポートするフル機能の YAML パーサーです。 PyYAML を使用して YAML 形式を解析するのは非常に簡単で、yaml.load() メソッドを通じて YAML 形式のデータを Python オブジェクトに変換するだけです。

import yaml

with open("data.yaml", 'r') as stream:
    data = yaml.load(stream)

print(data)
ログイン後にコピー

上記のコードは、data.yaml ファイル内の YAML 形式のデータを読み取って Python オブジェクトに変換し、最後に出力を出力します。

PyYAML では、yaml.dump() メソッドを使用して、Python オブジェクトを YAML 形式のデータに変換することもできます。

import yaml

data = [
    {'name': 'Alice', 'age': 25, 'occupation': 'programmer'},
    {'name': 'Bob', 'age': 30, 'occupation': 'designer'}
]

print(yaml.dump(data))
ログイン後にコピー

上記のコードは、Python リストを YAML 形式のデータに変換し、出力を出力します。

PyYAML の高度な機能

基本的な YAML 形式の解析とシリアル化に加えて、PyYAML は、型変換、カスタム タグ、検証、拡張機能などの多くの高度な機能も提供します。次に、これらの機能のいくつかをさらに詳しく見ていきます。

型変換

PyYAML は、YAML 形式のデータから、文字列、整数、浮動小数点数、辞書、リストなどを含む Python 組み込み型への自動変換をサポートします。たとえば、次の YAML 形式データを Python オブジェクトとして読み取ります。

date: 2021-06-25
count: 300
price: 99.99
ログイン後にコピー

読み取りプロセス中に、PyYAML は date フィールドを Python の datetime.date## に自動的に変換します。オブジェクトの場合、count フィールドは Python の整数型に変換され、price フィールドは Python の浮動小数点型に変換されます。

カスタム タグ

PyYAML はカスタム タグをサポートしています。これにより、カスタム Python オブジェクトを YAML 形式のデータに変換し、YAML データの元のオブジェクトを読み取るときにそれらを逆変換することができます。たとえば、次のカスタム クラスを定義します:

import datetime

class CustomDate:
    def __init__(self, year, month, day):
        self.date = datetime.date(year, month, day)
ログイン後にコピー

次に、次のコードを使用してカスタム クラスを YAML 形式に変換できます:

import yaml

def custom_date_representer(dumper, data):
    return dumper.represent_scalar('!CustomDate', '{}/{}/{}'.format(data.date.year, data.date.month, data.date.day))

def custom_date_constructor(loader, node):
    value = loader.construct_scalar(node)
    year, month, day = map(int, value.split('/'))
    return CustomDate(year, month, day)

data = [
    CustomDate(2021, 6, 25),
    CustomDate(2021, 6, 26)
]

yaml.add_representer(CustomDate, custom_date_representer)
yaml.add_constructor('!CustomDate', custom_date_constructor)

print(yaml.dump(data))
ログイン後にコピー

上記のコードでは、カスタム タグを登録します。

!CustomDate を定義し、対応する representer メソッドと constructor メソッドを定義して、カスタム クラスを YAML 形式に変換し、元のオブジェクトに復元します。

検証と拡張

PyYAML は、YAML 形式データの正確性の検証や新しいタグの登録などの検証および拡張機能も提供します。たとえば、次のコードを使用して YAML 形式データの正しさを検証できます。

import yaml

with open("data.yaml", 'r') as stream:
    try:
        data = yaml.safe_load(stream)
    except yaml.YAMLError as exc:
        print(exc)
ログイン後にコピー

上記のコードは、

yaml.safe_load() メソッドを使用して YAML 形式データをロードし、データの正確さに基づいて、対応するデータの情報を取得します。

同時に、次のコードを使用して新しいタグを登録することもできます。

import yaml

class CustomType:
    pass

def represent_custom_type(dumper, data):
    return dumper.represent_scalar('!CustomType', None)

yaml.add_representer(CustomType, represent_custom_type)

data = CustomType()

print(yaml.dump(data))
ログイン後にコピー
上記のコードでは、カスタム クラス

CustomType を新しいタグ !CustomType を追加し、対応する representer メソッドを定義して、それを YAML 形式のデータに変換します。

概要

この記事では、PyYAML を使用して YAML 形式を解析およびシリアル化する方法を紹介し、型変換、カスタム タグ、検証と拡張機能などの PyYAML の高度な機能をいくつか紹介します。この記事の紹介を通じて、読者は PyYAML の使用法をより深く理解し、Python サーバー プログラミングでより優れたアプリケーションを入手できると思います。

以上がPython サーバー プログラミング: PyYAML を使用した YAML 形式の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート