0

次のタプルがあります。

out = [1021,1022 ....]  # a tuple

「Keys1029」の各番号をリスト エントリに置き換えて、いくつかのレコードを反復処理する必要があります。その代わりに:

....Settings="Keys1029"/>
....Settings="Keys1029"/>

我々は持っています:

....Settings="Keys1020"/>
....Settings="Keys1022"/>

私は次のものを持っています:

for item in out:
    text = text.replace("Keys1029","Keys"+(str(item),1))

これにより TypeError: cannot concatenate 'str' オブジェクトと 'tuple' オブジェクトが発生します。

誰かがこれを修正する方法について私にアドバイスできますか?

前もって感謝します

4

6 に答える 6

4

不要な括弧がいくつかあります。次のことを試してください。

for item in out:
    text = text.replace("Keys1029", "Keys"+str(item), 1)
于 2013-05-15T16:54:03.610 に答える
1
"Keys"+(str(item),1)

"Keys"は文字列で(str(item), 1)あり、タプルです。それらを連結することはできません。やってみてください。

"Keys"+str(item)
于 2013-05-15T16:53:23.493 に答える
1

これを試して:

for item in out:
    text = text.replace("Keys1029","Keys"+str(item))

(..., 1) はタプルになるので、str の周りの () を削除しました。

于 2013-05-15T16:54:56.840 に答える
1

まず[1021,1022 ....]、タプルではなくリストです。(1021,1022 ....)タプルになります。

itemは数値、str(item)はこの数値を含む文字列です。"Keys"+str(item)2 つの文字列を連結するために使用します。タプルを作成する必要はありません。

また、フォーマット方法を使用することもできます: "Keys%d" % item.

于 2013-05-15T16:56:09.850 に答える
0

re.subこれを行うには、置換関数を使用できます。したがって、一致するパターンごとに、outリストから次の項目を取得し、それを置換として使用します。out十分なsがない場合は例外がスローされますが、その逆ではないことに注意してください。

str.replaceこのアプローチの利点は、置換がすべて一度に行われることです。そのため、 for にあるアイテムほど多くのアイテムを実行する必要はありませんout

また、必要に応じてそれが適切である場合は、そのまま捨てoutて次のようなものを使用できout = itertools.count(1021)ます。これにより、1021 から始まる整数の増加のイテラブルが得られます。

OPに基づく例

out = [1021, 1022]

text=  """
....Settings="Keys1029"/>
....Settings="Keys1029"/>"""

import re
print re.sub('(Settings="Keys)(.*?)(")', lambda m, n=iter(out): m.group(1) + str(next(n)) + m.group(3), text)

次に、次のようになります。

....Settings="Keys1021"/>
....Settings="Keys1022"/>
于 2013-05-15T17:05:32.307 に答える
0

text.replace("Keys1029","Keys%s"%item)

うまくいくはずです

于 2013-05-15T16:54:22.513 に答える