2

PythonでXMLパーサーを作成、別のディレクトリからさらにスクリプトを読み取る機能を追加しました。

2つの引数があります。最初は、XMLを解析するパスです。2番目は、最初のパスと照合したい別のXMLファイルの文字列です。

arg1 = \work\parser\main\tools\app\shared\xml\calculators\2012\example\calculator
path = calculators/2012/example/calculator

2つの文字列を比較して、両方が同じものを参照していることを特定するにはどうすればよいですか。また、calculatorどちらかの文字列から削除して、それを保存して使用できるようにするにはどうすればよいですか。

編集

考えただけです。year = re.findall(r"\.(\d{4})\.", path)正規表現を使用して、パスをインポートステートメントに変換するときにPythonが数値に関して抱えている問題を追跡して、パスから年を取得しました。

明らかに文字列を分割し、正規表現を使用してarg1のパターンとしてパスを一致させることができますが、これはかなり長い道のりのようです。確かにもっと良い方法がありますか?

4

3 に答える 3

2

ここでは、ファイルパスではなく、実際に文字列について話していると想定しています。@mgilsonの提案の方が優れています。

2つの文字列を比較して一致させるには、両方が同じものを参照していることを特定するにはどうすればよいですか。

まず最初に、 「同じこと」が何を意味するのかを特定する必要があります

一見すると、2番目の文字列がスラッシュが逆になっている最初の文字列で終わっている場合は、一致しているように見えます。

arg1 = r'\work\parser\main\tools\app\shared\xml\calculators\2012\example\calculator'
arg2 = r'calculators/2012/example/calculator'

>>> arg1.endswith(arg2.replace('/','\\'))
True

また、どちらかの文字列から電卓を削除して、それを保存して使用できるようにするにはどうすればよいですか?

また、文字列内の最初の電卓、最後の電卓、または電卓の出現箇所を削除するかどうかを決定する必要があります。

セパレータの後の最後の文字列を削除したいだけの場合は、次のようにします。

>>> arg2.split('/')[-1]
'calculator'

最後のビットなしで、元の文字列を取り戻すには、次のようにします。

>>> '/'.join(arg2.split('/')[:-1])
'calculators/2012/example'
于 2012-06-12T13:47:51.190 に答える
2

チェックアウトos.path.samefile

http://docs.python.org/library/os.path.html#os.path.samefile

およびos.path.dirname

http://docs.python.org/library/os.path.html#os.path.dirname

または多分os.path.basename(文字列のどの部分を保持したいかわかりません)。

于 2012-06-12T13:19:03.730 に答える
1

ここで、これを試してください:

arg1 = "\work\parser\main\tools\app\shared\xml\calculators\2012\example\calculator"
path = "calculators/2012/example/calculator"

arg1=arg1.replace("/","\\")
path=path.replace("/","\\")
if str(arg1).endswith(str(path)) or str(path).endswith(str(arg1)):
    print "Match"

それはあなたのニーズに合うはずです。乾杯 :)

于 2012-06-12T13:49:51.380 に答える