BeautifulSoup处理XML循环时迭代计数仅追加最终值问题
搞定你的循环赋值问题
嘿,我一眼就看出问题所在了——你在循环里一直复用同一个message对象!
Python里列表存的是对象的引用,不是复制出来的新对象。所以你每次把message塞进messages列表时,其实都是把同一个对象的"地址"存进去。循环跑完后,所有列表元素都指向最后那次修改的message,难怪所有messageid都是最后的65了。
怎么改?每次循环造个新的message就行
你得把创建message的代码挪到循环里面,确保每一轮迭代都生成一个全新的实例。比如这样:
count = 0 for i in oosASINS: # 这里根据你实际的message创建方式来初始化,示例用BeautifulSoup创建新节点 message = BeautifulSoup("<message><sku></sku><quantity></quantity><messageid></messageid></message>", "xml") sku = str(i) message.sku.string = sku message.quantity.string = "0" message.messageid.string = str(count) messages.append(message) count += 1
为啥这样有用?
现在每次循环都会生成一个独立的message对象,每个对象的属性都是单独设置的,添加到messages里的也是不同的实例。这样你的messageid就会从0开始依次递增,完全符合预期啦。
如果你的message原本是从某个模板或者已有节点复制来的,记得在循环里做深拷贝或者重新生成,别直接用同一个对象就行。
内容的提问来源于stack exchange,提问作者lolcats4u
相关产品推荐
相关产品推荐

