Pythonでyamlリスト要素を一度に1つずつ解析します

SU3

ファイル全体を解析するのではなく、必要に応じて入力ファイルを一度に1つのエントリで読み取ることができるPythonのyamlライブラリはありますか?ルートノードとしてリストを含む長いファイルがあります。特定のプロパティを満たす最初の要素を見つけようとしている場合、ファイル全体を読み取って解析する必要がない場合があり、結果をより速く取得できます。

flyx

PyYAMLの低レベルparse()APIを使用できます。

import yaml

for event in yaml.parse(input):
    # process event

イベントはここに文書化されています

ルートレベルシーケンスの各アイテムをネイティブPython値に構築する場合は、ComposerおよびConstructorクラスを使用する必要があります。Composerイベントを読み取って、に変換し、ノードConstructorからPythonの値を構築するノードがこれは、YAML仕様で定義されている読み込みプロセスに対応しています。

今PyYAMLとのComposerを期待する機能get_eventcheck_eventおよびpeek_event上に存在するselfが、それらを実装していません。それらはによって実装されParserます。したがって、YAMLローディングチェーンを機能させるために、PyYAMLは後で次のことを行います。

class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver):
  def __init__(self, stream):
    Reader.__init__(self, stream)
    Scanner.__init__(self)
    Parser.__init__(self)
    Composer.__init__(self)
    Constructor.__init__(self)
    Resolver.__init__(self)

これは、Loaderオブジェクトが必要であり、ParserトップレベルのイベントにAPIを使用し、ComposerおよびConstructorAPIを使用してトップレベルのシーケンスで各アイテムをロードすることを意味します

始めるためのコードは次のとおりです。

import yaml

input = """
- "A": 1
- "B": 2
- foo
- 1
"""

loader = yaml.SafeLoader(input)

# check proper stream start (should never fail)
assert loader.check_event(yaml.StreamStartEvent)
loader.get_event()
assert loader.check_event(yaml.DocumentStartEvent)
loader.get_event()

# assume the root element is a sequence
assert loader.check_event(yaml.SequenceStartEvent)
loader.get_event()

# now while the next event does not end the sequence, process each item
while not loader.check_event(yaml.SequenceEndEvent):
    # compose current item to a node as if it was the root node
    node = loader.compose_node(None, None)
    # construct a native Python value with the node.
    # we set deep=True for complete processing of all the node's children
    value = loader.construct_object(node, True)
    print(value)

# assume document ends and no further documents are in stream
loader.get_event()
assert loader.check_event(yaml.DocumentEndEvent)
loader.get_event()
assert loader.check_event(yaml.StreamEndEvent)

YAMLドキュメントにアンカーとエイリアスがあると、問題が発生する可能性があることに注意してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

pushButtonを使用してリストの要素を一度に1つずつ反復する方法

分類Dev

同時非同期リクエストを受信し、一度に1つずつ処理します

分類Dev

チェックリストのために一度に1つずつ状態を変更します

分類Dev

MATLAB-マトリックスの各行の先行ゼロを一度に1つずつ削除しますか?

分類Dev

リスト内のすべてのアイテムに、一度に1つずつではなく、一度に追加します。CharacterPictureGrid

分類Dev

Pythonで同じ要素を繰り返さずに、リストから一度に1つの要素を表示する方法

分類Dev

UnityでGetKeyDownを使用して、配列内の要素を一度に1つずつ表示します

分類Dev

UITableViewCellを一度に1つずつロードします

分類Dev

一度に1つずつ戦う敵のリストを取得する

分類Dev

Expressリクエストを一度に1つずつ処理する

分類Dev

リストが空になるまで一度に1つずつ削除して、すべての組み合わせを見つけます。Python3でリストを処理するのに最適なデータ構造は何ですか。

分類Dev

Pythonでプロセスを一度に1つずつ出力する

分類Dev

リスト要素を一度に2つの要素のリストのリストに追加します

分類Dev

プロローグでリストの要素を一度に 3 つずつ比較する方法

分類Dev

InternetExplorerで一度に1文字ずつテキストを強調表示します

分類Dev

Lispでリスト内の要素のすべての順列を一度に1つずつ生成するにはどうすればよいですか?

分類Dev

express-リクエストを一度に1つに制限します

分類Dev

Unity、UI要素を一度に1つずつ更新する方法

分類Dev

一度に1行ずつ行列を複製します

分類Dev

htmlのクイズWebサイトで一度に1つずつ質問を表示します

分類Dev

2つのリストを一度に1つの要素でループする

分類Dev

Jqueryは一度に1つの要素を移動します

分類Dev

一度に1つのリストアイテムを検索で送信しようとしています

分類Dev

リストから一度に1つの要素/ divを表示する

分類Dev

RecyclerView一度に1つの要素をスクロールします

分類Dev

配列の要素を一度に1つの間隔で表示します

分類Dev

グーグルスクリプトは一度に1行ずつマークします

分類Dev

JavaScriptは一度に1行ずつ子ストリームを受信できません

分類Dev

リストから文字列を取り出して、一度に1文字ずつ比較する方法

Related 関連記事

  1. 1

    pushButtonを使用してリストの要素を一度に1つずつ反復する方法

  2. 2

    同時非同期リクエストを受信し、一度に1つずつ処理します

  3. 3

    チェックリストのために一度に1つずつ状態を変更します

  4. 4

    MATLAB-マトリックスの各行の先行ゼロを一度に1つずつ削除しますか?

  5. 5

    リスト内のすべてのアイテムに、一度に1つずつではなく、一度に追加します。CharacterPictureGrid

  6. 6

    Pythonで同じ要素を繰り返さずに、リストから一度に1つの要素を表示する方法

  7. 7

    UnityでGetKeyDownを使用して、配列内の要素を一度に1つずつ表示します

  8. 8

    UITableViewCellを一度に1つずつロードします

  9. 9

    一度に1つずつ戦う敵のリストを取得する

  10. 10

    Expressリクエストを一度に1つずつ処理する

  11. 11

    リストが空になるまで一度に1つずつ削除して、すべての組み合わせを見つけます。Python3でリストを処理するのに最適なデータ構造は何ですか。

  12. 12

    Pythonでプロセスを一度に1つずつ出力する

  13. 13

    リスト要素を一度に2つの要素のリストのリストに追加します

  14. 14

    プロローグでリストの要素を一度に 3 つずつ比較する方法

  15. 15

    InternetExplorerで一度に1文字ずつテキストを強調表示します

  16. 16

    Lispでリスト内の要素のすべての順列を一度に1つずつ生成するにはどうすればよいですか?

  17. 17

    express-リクエストを一度に1つに制限します

  18. 18

    Unity、UI要素を一度に1つずつ更新する方法

  19. 19

    一度に1行ずつ行列を複製します

  20. 20

    htmlのクイズWebサイトで一度に1つずつ質問を表示します

  21. 21

    2つのリストを一度に1つの要素でループする

  22. 22

    Jqueryは一度に1つの要素を移動します

  23. 23

    一度に1つのリストアイテムを検索で送信しようとしています

  24. 24

    リストから一度に1つの要素/ divを表示する

  25. 25

    RecyclerView一度に1つの要素をスクロールします

  26. 26

    配列の要素を一度に1つの間隔で表示します

  27. 27

    グーグルスクリプトは一度に1行ずつマークします

  28. 28

    JavaScriptは一度に1行ずつ子ストリームを受信できません

  29. 29

    リストから文字列を取り出して、一度に1文字ずつ比較する方法

ホットタグ

アーカイブ