問題タブ [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 - xml 解析が正しく機能しない
次のような構造の XML ファイルがあります。
解析には iterparser を使用しました。しかし、データを正しく印刷していません。ここにコードを追加しています。
from xml.etree.ElementTree import iterparse,dump
私の期待される出力:
出力が得られています
python - xml.etree.ElementTree iterparse() はまだ大量のメモリを使用していますか?
大きな XML ドキュメントを処理する必要があるスクリプトのメモリ フットプリントを削減するために、iterparse を試してきました。これが例です。TMX ファイルを読み取り、ユーザーが指定したサイズを超えないように 1 つまたは複数の出力ファイルに分割するために、この単純なスクリプトを作成しました。iterparse を使用しているにもかかわらず、886MB のファイルを 100MB のファイルに分割すると、スクリプトは使用可能なすべてのメモリで実行されます (私の 8MB の 6.5 を使用してクロールに粉砕します)。
私は何か間違ったことをしていますか?メモリ使用量が非常に高くなるのはなぜですか?
python - iterparse が子のテキストを取得しない
編集:それを機能させる方法を見つけました。elem.clear()
以下のコードに表示されていない呼び出しがあったことがわかりました。申し訳ありません。様子が分かるように修正しました。その呼び出しをifステートメント内に移動すると、問題が解決したことがわかりました。しかし、if ステートメントが終了する前に clear がどのように呼び出されたかはまだわかりません。
次のような XML ファイルがあります。
適切なスタイリングがないことはわかっていますが、それが私のスクリプトがそれを受け取る方法なので、全体像を示すことにしました。ファイルには基本的に、<alarm>
要素の下に数百の要素があり<root>
ます。
私がやりたいのは、ファイルを iterparse で解析し、 の子要素からすべてのテキスト情報を取得することです<alarm>
。これまでの私のスクリプトは次のようになります。
しかし、私None
は結果として得child.text
ます。スクリプトを実行したときに得られる出力は次のとおりです。
これで手を貸してくれませんか?
xml - iterparse を使用する XML パーサーが子を「失う」
次の点についてご協力をお願いいたします: 大きな XML ファイルを読み取って CSV に変換する必要があります。
同じことを行うと思われる2つの関数があります.1つ(function1)はiterparseを使用し(約2GBのファイルを処理する必要があるため)、もう1つは使用しません(function2)。
Function2 は、同じ XML ファイル (ただし、最大 150 MB) に対して非常にうまく機能し、そのサイズを超えると、メモリが原因で失敗します。
私が抱えている問題は、(関数 1 の) コードがエラーを出さないという事実にもかかわらず、子の一部が失われることです (これは大きな問題です!)。一方、 Function2 はすべての子を読み取り、「緩む」ことも失敗することもありません。
Q: function1 のコードで、一部の子が失われる (または正しく読み取れない、または無視される) 理由を確認できますか?
注 1: 必要な場合に備えて、50 KB の XML サンプルを送信する準備ができています。
注 2: 変数 'nchil_count' は、子の数をカウントするためのものです。
コード (関数 1):
コード (関数 2):
python - iterparse が「要素が見つかりません: 行 1、列 0」をスローしていますが、その理由がわかりません
インターネット経由で xml のチャンクを受信するネットワーク アプリケーション (Twisted を使用) があります (xml 全体が 1 つのパケットに収まらない可能性があるため)。私の考えたプロセスは、受信した xml メッセージをゆっくりと構築することです。私は xml.etree.ElementTree から iterparse に「落ち着きました」。私はいくつかのコードに手を出しましたが、次の (非 Twisted コード) は正常に動作します:
次に、次のコードを作成して、自分の側でデータを受信する方法をシミュレートしました。
しかし、コードは吐き出します:
「要素が見つかりません: 行 1、列 0」
私はそれに頭を包むことができません。2 番目のサンプルの stringIO の内容が最初のコード サンプルの stringIO と同じであるのに、なぜそのエラーが発生するのですか?
PS:
- これを尋ねたのは私が初めてではないことはわかっていますが、私の質問に答えたスレッドは他にありません。私が間違っている場合は、適切なスレッドを提供してください。
- 他のモジュールを使用するための提案がある場合は、それらを回答に含めないでください。コメントを追加します。
ありがとう
python - Python 要素ツリー iterparse フィルター ノードと子
elementTree の iterparse 関数を使用して、テキストに基づいてノードをフィルタリングし、それらを新しいファイルに書き込もうとしています。入力ファイルが大きい (100 MB 以上) ため、iterparse を使用しています。
入力.xml
期待される出力 (テキストに「movie」または「film」が含まれるすべてのページ)
現在のコード
ページのテキスト属性に基づいてフィルタする正規表現を追加するにはどうすればよいですか?
python - Python: iterparse メソッドの読み取りと更新を使用して、xml を更新し、新しい xml ファイルに保存する方法は?
私はそれをコンソールに出力することができ、それは私が望む方法ですが、保存する方法を把握できないようです. サンプルの XML は変更されません。私は非常に大きな XML ファイルと iterparse 関数を使用しています。
私のコード: