0

次のように、Python でコマンドライン引数を解析しようとしています。

python test.py /home/Desktop/test.xml

getopt を見つけましたが、3 つの引数でどのように機能しますか? このソースには 4 つしか表示されていませんが、これを減らす方法がわかりません。http://www.tutorialspoint.com/python/python_command_line_arguments.htm

また、DOM は XML ファイルを解析する最も効率的な方法ですか?

4

2 に答える 2

1

ここに非常に優れたチュートリアルがあるargparsegetopt優先します。より少ない作業でより良いエラーを示します。主に C API との互換性のために使用されると思いますが、どちらのモジュールもサポートする引数は少なくなります。あなたの特定のケースでは、おそらく次のようなことをしたいと思うでしょうargparsegetopt

import argparse

def parse_args():
    parser = argparse.ArgumentParser(usage)
    help = "The file to operate on"
    parser.add_argument("infile", type=argparse.FileType('r'), help=help)
    args = parser.parse_args()
    return args.infile

必要に応じて、lxmlは非常に便利/強力になります。私は個人的にBeautifulSoupを使用しました(それほど複雑ではない XML の場合)。標準ライブラリで推奨されるモジュールはElementTreeです。これは優れた API を持ち、多くの XML 処理を行うことができます。

edit :前に誤って述べたように非推奨でgetoptありません

于 2013-04-24T04:37:13.193 に答える
0

単一のコマンドライン引数は単純なケースであり、getopt他の解析モジュールは必要ありません。XML ライブラリで使用するファイル名として最後の引数を使用してみてください。

Pythonic XML 処理には、ElementTreeを使用します。

import sys
import xml.etree.ElementTree as ET

if __name__ == '__main__':
    print 'args:', sys.argv
    print 'last arg:', sys.argv[-1]
    if len(sys.argv) <= 1:
        sys.exit()
    tree = ET.parse(sys.argv[-1])
    root = tree.getroot()
    for child in root:
        print child.tag, child.text

(基本を理解した上で、ファイルの存在チェックとエラー処理を追加します)。

于 2013-04-24T05:18:25.927 に答える