問題タブ [celementtree]
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 - ElementTree の iterparse にかかる時間はどれくらいですか?
別の質問に答える際に、誰かが次のチュートリアルを見せてくれました。著者は iterparse を使用して 3 秒以内に ~100 MB の XML ファイルを解析したと主張しています。
http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/
~90 MB の XML ファイルを解析しようとしていますが、次のコードがあります。
約30秒かかります...同様のサイズのファイル、同様のアルゴリズム、および同じパッケージを使用して読んだチュートリアルで報告されたものと同じ大きさではありません.
誰かが私のコードの何が問題なのか、または私の状況とチュートリアルの違いに気付いていない可能性があることを教えてもらえますか?
Python 2.7.3 を使用しています。
補遺:
誰かがそうかもしれないと思った場合に備えて、私はかなり強力なマシンも使用しています。
python - cElementTreeの改行文字を指定します
コード
私は次のようにcElementTreeでxmlファイルを書いています:
実結果
これにより、次のファイルが作成されます(Windowsの場合)。
したがって、改行が欠落しています。
適切なウィンドウの改行文字\r\n
を「手動で」追加しようとしましたが、次のようになります。
望ましい結果
ただし、各行の後に正しい改行文字を入れたいので、出力は次のようになります。
どうすればそれを達成できますか?
python - サブプロセスからxmlを解析できません。PythonでのPopen出力
このライブラリを使用してxmlを解析しています:
パーサーへの xml 入力は、次の出力ですsubprocess.Popen
。
次のエラーが表示されます。
ただし、同じコマンドから生成された xmlxml_command
をファイルとして渡すと、完全に正常に動作します。
python - ElementTree for Python を使用して、すべての XML 要素を反復処理し、各要素の値にロジックを適用する方法
現在、XML ファイルの Element 値にロジックを適用しようとしています。具体的には、要素名/属性自体には触れずに、すべての値を UTF-8 にエンコードしようとしています。
サンプル XML は次のとおりです。
現在、これを達成するために3つの方法を試しましたが、成功しませんでした:
まず、各要素をループして、.text と .parse を使用して値を取得しようとしました。
これにより、テキスト \311 が正しく変更されていない XML ファイルが生成され、そのままの状態になります。
次に、cElementTree を使用して .iterparse を試してみましたが、役に立ちませんでした。
これにより、次の結果が得られます。
そこで何が間違っているのかわかりませんが、同じ配置で複数の例を見てきましたが、.text なしで要素を印刷すると、最初に「end」の文字列値を持つタプルが表示されます。この方法で問題が発生します。
.findall() などの要素名を指定せずに、各要素に格納されている値にロジックを適用して、xml をファイルに書き込むときに、プログラムが反復されたときに行われた変更を保存するように、要素を適切に反復するにはどうすればよいですか要素値?
python - Python での SAX 解析の最速の方法
開発中の Web サービス用にリアルタイムで解析する必要がある XML ドキュメント (1.5MB) があります。この投稿によると、Python で XML を解析するための推奨される方法である cElementTree Python ライブラリを使用していますが、これが実際に最速の方法であるかどうかはわかりません。
サーバーのメモリ使用量を最小限に抑えるだけでなく、解析のパフォーマンスを向上させたいと考えており、現在ET.iterparse()を使用して SAX アプローチをテストしています。私のベンチマークは、同じ XML ドキュメントを 200 回純粋に解析した場合の次の結果を示しています。
- ET.XML ()を使用した DOM : 20.5 秒
- ET.iterparse ()を使用した SAX : 32.4 秒
これは、DOM で約102 ミリ秒、 SAXで XML 文書ごとに 162 ミリ秒に相当します。
ただし、私のアプリケーションではパフォーマンスとメモリの両方が重要であるため、SAX アプローチからより多くのパフォーマンスを絞り出して DOM の 102 ミリ秒に匹敵するか、あるいはさらに高速化したいと考えています。
以下のコードのような SAX 解析の一般的な方法の 1 つを使用しています。
python - cElementTree で名前空間プレフィックスを抑制
Python 2.6 では、名前空間のプレフィックスを抑制する必要があります。ここに投稿されたソリューションを使用しましたが、動作しますが、解析を高速化するために代わりに cElementTree を使用すると、機能しなくなります。私のログから:
2 つの実装の間に根本的な違いはありますか? 別の回避策はありますか?私が持っているモジュールのバージョン:
ありがとう!
python - xml.etree.ElementTree で要素に親と xpath の知識を与えるより良い方法はありますか
私は動作する次のコードを持っています:
この出力は次のようになります。
現在、これは元のコードから大幅に変更されていますが、それを共有することはできません。
関数はそれほど非効率的ではありませんが、cElementTree から ElementTree に切り替えるとパフォーマンスが大幅に低下することが予想されましたが、私の実験では、cElementTree のモンキー パッチは不可能のようで、切り替える必要がありました。
私が知る必要があるのは、cElementTree にメソッドを追加する方法があるかどうか、またはこれを行うためのより効率的な方法があるかどうかで、パフォーマンスの一部を取り戻すことができます。
最後の手段として、選択した静的型付けを実装し、cython でコンパイルすることを考えていることをお知らせしますが、特定の理由により、実際にはそうしたくありません。
ご覧いただきありがとうございます。
編集: 遅延バインディングという用語の間違った使用について申し訳ありません。ときどき、私の語彙力が足りないものを残すことがあります。私が言いたかったのは「モンキーパッチ」です。
EDIT:@Corley Brigman、Guy:質問に対処する回答をありがとうございます(そして、元の投稿でこれを述べるべきでした)コーディングを作成する素晴らしいライブラリであるlxmlを使用する前に、このプロジェクトを完了しました簡単ですが、新しい要件 (これは Splunk と呼ばれる製品へのアドオンとして実装する必要があります) により、Splunk に同梱されている python 2.7 インタープリターに結び付けられ、django を除いてサードパーティのライブラリを追加する可能性が排除されます。