1

ここで学ぶ機会。ファイル内の特定のプロパティを更新している状況があります。ファイルを更新する関数があります:

def update_tiapp(property, value):
  print 'update_tiapp: updating "%s" to "%s"' % (property, value)
  for line in fileinput.input(os.path.join(app_dir, 'tiapp.xml')):  # , inplace=True
    if property is 'version':
      line = re.sub(r'(<version>).*?(</version>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
    elif property is 'brand':
      line = re.sub(r'(<property name="brand" type="string">).*?(</property>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)'\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
    elif property is 'banner-bmp':
      line = re.sub(r'(<banner-bmp>).*?(</banner-bmp>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
    elif property is 'dialog-bmp':
      line = re.sub(r'(<dialog-bmp>).*?(</dialog-bmp>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
    elif property is 'url':
      line = re.sub(r'(<url>).*?(</url>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)

dialog-bmp&以外の条件はすべて問題ありませんbanner-bmp。理解できない、または見つけられない何らかの理由で、条件が一致しません。プロパティと条件を に変更するとdialog、python は喜んで一致し、変更を加えてくれます。

なに?!

これは簡単な変更であり、作成してもかまいませんが、理解したいと思います。

すべてを吹き飛ばすハイフンについてはどうですか? ここでは文字列の一致だけではありませんか、それとも内部で予期していなかった何かが起こっているのでしょうか?

4

1 に答える 1

2

is等しいかどうかを確認するために使用しないでください (オブジェクトの同一性を確認します)。==代わりに使用してください:

if property == "version":
    ...
elif property == "brand":
    ...
etc.

isインターン/キャッシュされた短い文字列に対して機能する場合がありますが、Python 識別子 (「変数名」) として有効な文字のみが含まれている場合に限ります。あなたのプログラムはこれの完璧な例です:

>>> a = "dialog-bmp"
>>> b = "dialog-bmp"
>>> a is b
False
>>> id(a)
32571184L
>>> id(b)
32571088L
>>> a = "brand"
>>> b = "brand"
>>> a is b
True
>>> id(a)
32610664L
>>> id(b)
32610664L
于 2013-04-11T12:07:37.387 に答える