背景:我正在尝试从tmx文件中读取,并尝试在文件中查找特定字符串。
到目前为止的代码
import string
mapName = "test.js"
tmxmap = "map.tmx"
n,y,t = 0,0,0
with open (mapName, 'w') as f:
with open (tmxmap, 'r') as f1:
t_contents = f1.readlines()
for line in t_contents:
if '<objectgroup' in line:
n = t
if '</objectgroup' in line:
y = t
t = t + 1
f1.seek(1)
print (n,y)
for i in range (n,y+1):
#f.write (t_contents[i])
for line in t_contents[i]:
if "id" in line:
f.write(t_contents[i])
print ("done")
'
所以如果你愿意,你可以忽略代码的前半部分,因为这是我为了获取文件的特定部分所写的代码,但是在其中你可以看到我可以在一行内搜索一个字符串。上半场工作正常
然而,当我试图在底部'if'id'在线'时,该部分不再起作用。然而,当我做'if'i'排队时,该声明确实有效。(只有一个字符,如果我做'如果'x'在行',这也有效,所以我不确定问题是什么。
我想读的tmx文件部分是
<objectgroup name="Walls" visible="0">
<object id="2" x="210" y="145" width="93" height="95"/>
<object id="3" x="56" y="150" width="48" height="51"/>
<object id="5" x="184" y="117.5" width="48" height="51"/>
<object id="6" x="311" y="117.5" width="48" height="51"/>
<object id="7" x="727" y="21.5" width="48" height="51"/>
<object id="8" x="1207" y="565.5" width="48" height="51"/>
<object id="9" x="1240" y="598.5" width="48" height="51"/>
<object id="10" x="1144" y="982.5" width="48" height="51"/>
<object id="11" x="1177" y="1078.5" width="48" height="51"/>
<object id="12" x="984" y="1046.5" width="48" height="51"/>
<object id="13" x="833" y="643" width="414" height="315"/>
<object id="15" x="102" y="485" width="308" height="86"/>
<object id="16" x="421" y="485" width="438" height="86"/>
<object id="18" x="772.667" y="133.333" width="87.3333" height="436.667"/>
<object id="20" x="355" y="162" width="410" height="315"/>
<object id="21" x="759" y="662.5" width="48" height="51"/>
</objectgroup>
答案 0 :(得分:1)
你的问题在于额外的循环。循环for line in t_contents[i]:
遍历t_contents[i]
的每个元素。由于t_contents[i]
是一个字符串,因此其元素是单个字符,因此line
始终是一个字符,并且只能等于另一个字符。你需要摆脱一个循环:
for i in range (n,y+1):
# for line in t_contents[i]:
if "id" in t_contents[i]:
f.write(t_contents[i])