xml フィールドから長いテキスト文字列を組み立てる必要があります。
XML_FIELD_ONE = "Iamacatthatisoddlyimmunetocatnip"
XML_FILED_TWO = [7,8,24]
FILED_TWO には、\n または \r を挿入するインデックスが含まれています。2 つのインデックスが 1 離れている場合 (7、8 など)、\r\n を挿入する必要があります。インデックスがソロの場合 (24 など)、\n を挿入する必要があります。
このコードで 25K 行のファイルを処理するには、約 2 分かかります。私は何が間違っているのですか?
XML_FIELD_ONE = list("Iamacatthatisoddlyimmunetocatnip")
XML_FILED_TWO = [7,8,24]
idx = 0
while idx <= len(XML_FIELD_ONE):
for position in XML_FIELD_ONE:
for space in XML_FIELD_TWO:
if idx == int(space) and idx+1 == int(space)+1:
XML_FIELD_ONE[idx] = "\r"
try:
XML_FIELD_ONE[idx+1] = "\n"
except:
pass
elif idx == int(space):
XML_FIELD_ONE[idx] = "\n"
idx += 1
new_text = "".join(XML_FIELD_ONE)
return new_text
これを行う簡単な方法は次のとおりです。
for offset in XML_FILED_TWO:
XML_FILED_ONE[offset] = \n
しかし、これは「2 つのオフセットが一緒の場合、最初のオフセットは \r、次のオフセットは \n」に違反します。
1 つだけ必要なときにトリプル ループを作成しました。これは恐ろしく非効率です。新しいアイテムを挿入する場所を正確に知っています。場所を見つけるために 2 つのカウンターをインクリメントする代わりに、直接そこに移動します。
どこに挿入が必要なのか正確にはわかりませんが、これは近いはずです。元のインデックスを正しく保つには、右端から挿入して左に移動する必要があります。そのため、XML_FIELD_TWOを逆にします。
デバッグ用の print ステートメントを残しました。
XML_FIELD_ONE = list("Iamacatthatisoddlyimmunetocatnip")
XML_FIELD_TWO = [7,8,24]
print XML_FIELD_ONE
XML_FIELD_TWO = XML_FIELD_TWO[::-1]
print XML_FIELD_TWO
i = 0
while i < len(XML_FIELD_TWO):
print i, XML_FIELD_TWO[i]
if XML_FIELD_TWO[i] - XML_FIELD_TWO[i+1] == 1:
XML_FIELD_ONE.insert(XML_FIELD_TWO[i], '\r\n')
i += 2
else:
XML_FIELD_ONE.insert(XML_FIELD_TWO[i], '\n')
i += 1
print "\n", ''.join(XML_FIELD_ONE)
出力:
['I', 'a', 'm', 'a', 'c', 'a', 't', 't', 'h', 'a', 't', 'i', 's', 'o', 'd', 'd', 'l', 'y', 'i', 'm', 'm', 'u', 'n', 'e', 't', 'o', 'c', 'a', 't', 'n', 'i', 'p']
[24, 8, 7]
0 24
Iamacatthatisoddlyimmune
tocatnip
1 8
Iamacatt
hatisoddlyimmune
tocatnip
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加