問題タブ [iterparse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python: ElementTree で xPath を使用できない
iterparse()
ofを使用して iTunes プレイリストを解析しようとしてElementTree
いますが、次のエラーが発生します。
コードを以下に示します。
私が間違っていることは何ですか?ファイルが大きすぎるので、iterparse()
とにかく使用する必要があります。
python - iterparse はフィールドの解析に失敗しますが、他の同様のものは問題ありません
Python を使用iterparse
して、nessus スキャン (.nessus ファイル) の XML 結果を解析します。予期しないレコードの解析は失敗しますが、同様のレコードは正しく解析されています。
XML ファイルの一般的な構造は、次のような多数のレコードです。
言い換えれば、多数のホスト ( ReportHost
) には報告する項目が多く ( ReportItem
)、後者にはいくつかの特徴 ( foo
、bar
) があります。アイテムごとに 1 行を、その特性とともに生成することを検討します。
ファイルの途中の単純な行で解析が失敗します (foo
その場合はcvss_base_score
)
約 200 の同様の行が問題なく解析されました。
関連するコードは以下のとおりです。これはコンテキスト マーカーを設定します (inReportHost
そしてinReportEvent
、XML ファイルの構造のどこにいるかを教えてくれ、コンテキストに応じて値を割り当てるか出力します)。
cvss
cvss = elem.text
同一のエントリがファイル内で以前に適切に解析されていても、(割り当て後に) None 値を持つことがあります。
割り当ての下に次の行に沿って何かを追加すると
その後、さらに多くの解析でcvss
適切な値が割り当てられます (その他の値は None です)。
間違った解析を<ReportHost>...</reportHost>
引き起こし、それをプログラムで実行すると、正常に動作します (つまり、期待どおりcvss
に割り当てられ9.3
ます)。
似たようなレコードが大量にあると、一部は正しく処理され、一部は正しく処理されないため (一部のレコードは同一であり、それでも異なる方法で処理されます)、コードのどこでミスをしたかわかりません。また、失敗したレコードについて特に何も見つけることができません。前後の同一のレコードは問題ありません。
python - GAE Python LXML - 属性オブジェクトの XMLSyntaxError 仕様のマンデート値
Python で Google App Engine を使用しており、GZipped XML ファイルを取得して LXML の iterparse で解析しようとしています。lxml.de の例を使用して、次のコードを作成しました。
実行すると、次のエラーが表示されます。
このエラーはどういう意味ですか? XML ファイルの形式が正しくないと推測していますが、どこで問題を探すべきかわかりません。どんな助けでも大歓迎です!
python - コンテキストを維持しながら反復使用するためのベストプラクティスは?
iterparseの一般的な使用法(およびJF Sebastianによる回答)について尋ねた質問に続いて、 nessusXML結果ファイルを解析するようにコードを再編成します。前の質問から引用すると、ファイル構造は次のとおりです。
言い換えれば、多くのホスト(ReportHost
)は、レポートする項目()が多くReportItem
、後者はいくつかの特性(foo
、bar
)を持っています。アイテムごとに1つの行を生成することを検討します。その特徴は次のとおりです。
XMLファイルから特定のファイルを抽出する方法を理解しています(これは本質的に私の前の質問に対する答えです)。これらの抽出されたフィールドをコンテキスト内に保持する必要があります(=どちらに関連しているかを知る必要がありReportHost
ますReportItem
)。ReportHost
私のアイデアは、マーカーを使用することでした。これは、私がブロック内にいるのかブロック内にいるのかを教えてくれる変数でありReportItem
、そこから決定します(if inReportHost: ...
)-ただし、これが反復解析でXMLをナビゲートする適切な方法ではないのではないかと心配しています。
それを参照する「ベストプラクティス」ドキュメントはありますか?
編集:コメントに続く改善された例
xml - iterparse 使用時の XMLSyntax エラー
Python で大きな XML ファイルを解析しています。大きな XML ファイルの関連部分は次のとおりです。
モジュールを使用して、iterparse
この XML を解析しています。
次のトレースで次の XMLSyntaxError を受け取ります
いくつかの重要なポイント -
iterparse
[1] XML のサイズは 3GB (またはそれ以上) と大きいため、モジュールの使用は必須です。
[2] 構文エラーをスローする XML ファイルの部分のみを提供しました。
私の質問は次のとおりです。
[1] この問題を自動的に修正できますか? もしそうなら、どのように?
[2] この問題を手動で修正できますか? もしそうなら、どのように?
[3] この問題を無視して、大きな XML ファイルの解析を続行できますか? もしそうなら、どのように?
次のリソースを見てきました。
大きな XML ファイルの解析中に Python の lxml で XMLSyntaxError を処理するにはどうすればよいですか?
Python (iterparse) のエンコーディング エラーを無視しますか?
無効な Char 値で iterparse を回復する方法はありますか?
しかし、誰も私の質問に答えることができませんでした。
python - Python iterparse を使用した XML 属性値の取得
Python (2.7) で cElementTree iterparse を使用して XML 属性値を取得する方法を見つけようとしています。私のXMLは次のようなものです:
私のコードは次のようなものです:
私は標準入力からのビッグデータを扱っています。私はこれを理解する運がありません。誰かがこれを行う方法(最適?)を教えてもらえますか?
iterparse - Iterparse は、デフォルトの名前空間で xml を解析するときに空の iterable を返します
iterparse を使用して xml ドキュメントを解析しています。
- 期待される結果: いくつか
end
のイベントが表示されます - 実際の結果: 何も起こらない
私が試したいくつかのこと:
- xml から名前空間を削除すると、正常に動作します。
- のようなプレフィックスを持つ名前空間を使用すると、正常に
xlmns:t="blah.com"
動作します。 - を削除する
tag="foo"
と、正常に動作します。
ただし、ベース タグとデフォルトの名前空間の両方を使用したいと考えています。これは iterparse のバグですか? 私は他に何か間違ったことをしていますか?
編集: コードを編集して、ident エラーなしでコピーして貼り付けることができるようにしました。
python - lxml iterparse タグの引数とメモリ消費量
で大きな xml ファイルを処理していlxml.iterparse
ます。これはうまく機能しますが、最近私のファイルが非常に大きくなったため、メモリをいっぱいにする iterparse 動作を見つけました。elem
次のコードを考えてみましょう。このコードは、1 つの並べ替えに 300000要素、300000 要素と 300000要素を含むファイルを書き込みますother_elem
。
elem
次に、メモリ使用量を時々出力しながら、以下を使用してのみを解析します(そしてそれらに対しては何もしません)。
出力は最後までメモリ使用量が少ないことを示しており、突然ジャンプします。sを含まないファイルを読み込もうとすると、この動作はなくなりますother_elem
。iterparse への引数を省略し、代わりに if コンストラクトを使用してそれをテストする遅い回避策はtag
、おそらくel.clear()
一致しない要素に対して実行できるため、メモリを解放します。したがって、私の質問はこれを解決する方法ではありませんが、出力する必要のない要素で iterparse がメモリを浪費するのはなぜですか、またはおそらく、ここで何が間違っているのでしょうか?
python - lxml.iterparse で同じコンテンツを 2 回解析する
なぜこれが機能するのかわかりません:
これが機能しない場所:
そして私にこのエラーを与えます:
同じコンテンツを 2 回解析することはできませんか? iterparse コマンド全体ではなく、ループをコメントするだけで機能するのは奇妙です。
何かを閉じるのに欠けていますか?
どうもありがとう